Verwenden Sie KI, um die Unterschiede zwischen zwei Bildern zu finden

王林
Freigeben: 2024-02-13 16:30:05
nach vorne
1280 Leute haben es durchsucht

使用 AI 找出两幅图像之间的差异

Frageninhalt

Ich suche nach einer Möglichkeit, mithilfe von KI den Unterschied zwischen zwei Bildern zu ermitteln.

Dies ist mein College-Projekt. Mein Professor hat mich gebeten, ein Programm zu entwickeln, um mithilfe künstlicher Intelligenz Unterschiede in zwei Bildpaaren zu erkennen und zu finden.

Ich stelle es über ein siamesisches Netzwerk bereit, um die Differenz zu berechnen. Wenn die Differenz größer als der Schwellenwert ist, verwende ich den folgenden Code, um die Differenz anzuzeigen:

input_images = np.array([[img1, img2]])
difference_image = np.abs(input_images[0, 0] - input_images[0, 1])
plt.imshow(difference_image)
Nach dem Login kopieren

Aber mein Professor akzeptiert es nicht Er forderte mich auf, conv2d zu verwenden, um das Bild in kleinere Formen aufzuteilen und dann die Formen zu vergleichen und mithilfe von Begrenzungsrahmen hervorzuheben, wenn es Unterschiede gibt.

Kann jemand bei der Bereitstellung dieses Codes helfen?

Mein vorheriger Code war:

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()
Nach dem Login kopieren


Richtige Antwort


Ich habe einen Weg gefunden, mithilfe eines CNN-Netzwerks den Unterschied zwischen zwei Bildern zu ermitteln 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()
Nach dem Login kopieren

Dieser Code verwendet ein CNN-Netzwerk, um den Abstand zwischen zwei Bildarrays zu berechnen

Das obige ist der detaillierte Inhalt vonVerwenden Sie KI, um die Unterschiede zwischen zwei Bildern zu finden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage