Maison >développement back-end >Tutoriel Python >Utilisez l'IA pour trouver les différences entre deux images
Je cherche un moyen de trouver la différence entre deux images à l'aide de l'IA.
C'est mon projet universitaire, mon professeur m'a demandé de créer un programme pour détecter et trouver des différences dans deux paires d'images grâce à l'intelligence artificielle.
Je le déploie en réseau siamois, pour calculer la différence, si la différence est supérieure au seuil, j'utilise le code suivant pour afficher la différence :
input_images = np.array([[img1, img2]]) difference_image = np.abs(input_images[0, 0] - input_images[0, 1]) plt.imshow(difference_image)
Mais mon professeur ne l'accepte pas Il m'a incité à utiliser conv2d pour diviser l'image en formes plus petites, puis comparer les formes et les surligner à l'aide de cadres de délimitation s'il y a des différences.
Quelqu'un peut-il aider à déployer ce code ?
Mon code précédent était :
import numpy as np import matplotlib.pyplot as plt from tensorflow import keras from tensorflow.keras import layers img1 = plt.imread('1-1.jpg') img2 = plt.imread('1-2.jpg') input_shape = img1.shape # Assuming images are of the same shape # Function to create # def create_siamese_model(input_shape): input_image_1 = layers.Input(shape=input_shape, name='input_image_1') input_image_2 = layers.Input(shape=input_shape, name='input_image_2') # Base network base_network = keras.Sequential([ layers.Conv2D(40, (3, 3), activation='relu', input_shape=input_shape), layers.MaxPooling2D(pool_size=(2, 2)), layers.Flatten(), layers.Dense(256, activation='relu') ]) # Encoded representations of input images encoded_image_1 = base_network(input_image_1) encoded_image_2 = base_network(input_image_2) # L1 distance layer l1_distance = layers.Lambda(lambda tensors: keras.backend.abs(tensors[0] - tensors[1]))([encoded_image_1, encoded_image_2]) # Output layer output_layer = layers.Dense(15, activation='sigmoid')(l1_distance) model = keras.Model(inputs=[input_image_1, input_image_2], outputs=output_layer) input_images = np.array([[img1, img2]]) predictions = model.predict([input_images[:, 0], input_images[:, 1]]) threshold=0.5 if predictions[0, 0] > threshold: # Highlight differences if the prediction is above the threshold difference_image = np.abs(input_images[0, 0] - input_images[0, 1]) difference_image plt.imshow(difference_image) plt.show()
J'ai trouvé un moyen de trouver la différence entre deux images en utilisant un réseau CNN Code :
# Importing necessary libraries import tensorflow as tf import matplotlib.pyplot as plt # Specify the file paths for the two images image_path1 = '1.jpg' image_path2 = '2 .jpg' # Read and decode images, then normalize pixel values to the range [0, 1] img1 = tf.io.read_file(image_path1) img1 = tf.image.decode_image(img1, channels=1) img1 = tf.cast(img1, tf.float32) / 255.0 img2 = tf.io.read_file(image_path2) img2 = tf.image.decode_image(img2, channels=1) img2 = tf.cast(img2, tf.float32) / 255.0 # Add a batch dimension to the images img1 = tf.expand_dims(img1, axis=0) img2 = tf.expand_dims(img2, axis=0) # Create a Conv2D layer with specified parameters conv2d_layer = tf.keras.layers.Conv2D(filters=1, kernel_size=(3, 3), activation='relu', padding='same') # Apply the Conv2D layer to both images output1 = conv2d_layer(img1) output2 = conv2d_layer(img2) # Calculate the absolute difference between the Conv2D outputs diff = tf.abs(output1 - output2) # Plotting the images and Conv2D outputs for visualization plt.figure(figsize=(10, 5)) plt.subplot(1, 4, 1) plt.imshow(tf.squeeze(img1), cmap='gray') plt.title('Image 1') plt.axis('off') plt.subplot(1, 4, 2) plt.imshow(tf.squeeze(img2), cmap='gray') plt.title('Image 2') plt.axis('off') plt.subplot(1, 4, 3) plt.imshow(tf.squeeze(output1), cmap='gray') plt.title('Conv2D Image 1') plt.axis('off') plt.subplot(1, 4, 4) plt.imshow(tf.squeeze(diff), cmap='gray') plt.title('Absolute Difference') plt.axis('off') # Display the plot plt.show()
Ce code utilise le réseau CNN pour calculer la distance entre deux tableaux d'images
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!