I am looking for a way to find the difference between two images using ai.
This is my college project, my professor asked me to create a program to detect and find the differences in two pairs of images using artificial intelligence.
I use siamese network to deploy it, to calculate the difference, if the difference is greater than the threshold, I use the following code to display the difference:
input_images = np.array([[img1, img2]]) difference_image = np.abs(input_images[0, 0] - input_images[0, 1]) plt.imshow(difference_image)
But my professor doesn’t accept it He prompted me to use conv2d to split the image into smaller shapes and then compare the shapes and if there are differences, use bounding box highlighting.
Can anyone help deploy this code?
My previous code was:
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()
I found a way to find the difference between two images using a cnn network 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()
This code uses a cnn network to calculate the distance between two image arrays
The above is the detailed content of Use AI to find the differences between two images. For more information, please follow other related articles on the PHP Chinese website!