我正在寻找一种使用 ai 发现两个图像之间差异的方法。
这是我的大学项目,我的教授要求我创建一个程序来使用人工智能检测并发现两对图像中的差异。
我使用 siamese network 部署它,来计算差异,如果差异大于阈值,我使用以下代码来显示差异:
input_images = np.array([[img1, img2]]) difference_image = np.abs(input_images[0, 0] - input_images[0, 1]) plt.imshow(difference_image)
但是我的教授不接受 他提示我使用 conv2d 将图像分割成更小的形状,然后比较这些形状,如果存在差异,请使用边界框突出显示。
任何人都可以帮助部署此代码吗?
我以前的代码是:
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()
我找到了一种使用 cnn 网络来查找两幅图像之间差异的方法 代码:
# 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()
这段代码使用cnn网络来计算两个图像数组之间的距离
以上是使用 AI 找出两幅图像之间的差异的详细内容。更多信息请关注PHP中文网其他相关文章!