Однородность цвета и текстуры изображения.Python

Программы на Python
Anonymous
Однородность цвета и текстуры изображения.

Сообщение Anonymous »

Я новичок в области глубокого обучения, и у меня возникла проблема с определением того, имеют ли два изображения одинаковый цвет и текстуру. Например, у меня есть

Основное изображение –

Изображение


Теперь в отношении этого изображения мне нужно определить, следующие изображения имеют однородную текстуру и распределение цветов –

изображение 1 –

Изображение


изображение 2 -< /strong>

Изображение


изображение 3 -


[img]https: //i.sstatic.net/X6JA3.jpg[/img]


Мне нужно разработать алгоритм, который будет оценивать эти 3 изображения с помощью основного изображения. Алгоритм должен одобрить изображение 1 и отклонить изображение 2 из-за его цвета и изображение 3 из-за однородности цвета и текстуры.

Мой подход к проблеме заключался в непосредственном анализе изображения на наличие текстуры. обнаружение. Я обнаружил, что метод Local Binary Patterns хорош среди всех методов распознавания текстур (но я не уверен). Я использовал реализацию Skimage с opencv в Python и обнаружил, что метод работает.

Код: Выделить всё

from skimage import feature
import numpy as np
import cv2
import matplotlib.pyplot as plt

class LocalBinaryPatterns:
def __init__(self, numPoints, radius):
# store the number of points and radius
self.numPoints = numPoints
self.radius = radius

def describe(self, image, eps=1e-7):
# compute the Local Binary Pattern representation
# of the image, and then use the LBP representation
# to build the histogram of patterns
lbp = feature.local_binary_pattern(image, self.numPoints,
self.radius, method="uniform")
(hist, _) = np.histogram(lbp.ravel(),
bins=np.arange(0, self.numPoints + 3),
range=(0, self.numPoints + 2))

# normalize the histogram
hist = hist.astype("float")
hist /= (hist.sum() + eps)

# return the histogram of Local Binary Patterns
return hist

desc = LocalBinaryPatterns(24, 8)

image = cv2.imread("main.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
hist = desc.describe(gray)

plt.plot(hist,'b-')
plt.ylabel('Feature Vectors')
plt.show()
Он обнаружил признаки и построил гистограмму векторов признаков. Я построил гистограмму с помощью matplotlib и обнаружил, что особенности текстуры изображения 1 и изображения 2 почти аналогичны основному изображению. И особенности текстуры изображения 3 не совпадали.

Затем я начал анализировать изображения на предмет их цвета. Я построил цветовые гистограммы, используя opencv as -

Код: Выделить всё

import cv2
from matplotlib import pyplot as plt

def draw_image_histogram(image, channels, color='k'):
hist = cv2.calcHist([image], channels, None, [256], [0, 256])
plt.plot(hist, color=color)
plt.xlim([0, 256])

def show_color_histogram(image):
for i, col in enumerate(['b', 'g', 'r']):
draw_image_histogram(image, [i], color=col)
plt.show()

show_color_histogram(cv2.imread("test1.jpg"))
Я обнаружил, что цветовая гистограмма изображения 1 соответствует эталонному изображению. И цветовые гистограммы изображений 2 и 3 не совпадали. Таким образом я выяснил, что изображение 1 совпадает, а изображения 2 и 3 — нет.

Но это довольно простой подход, и я понятия не имею о ложном положительные моменты, которые он будет соответствовать. Более того, я не знаю, какой подход к проблеме является лучшим.

Я также хочу, чтобы это было сделано с помощью единого и надежного алгоритма, такого как CNN (но не следует быть слишком дорогим в вычислительном отношении). Но у меня нет опыта работы с CNN. Так стоит ли мне обучать CNN мастер-изображениями? Пожалуйста, укажите мне правильное направление. Я также сталкивался с LBCNN, могут ли они решить проблему? И какие могут быть другие подходы лучше?

Большое спасибо за помощь

Подробнее здесь: https://stackoverflow.com/questions/541 ... e-in-image

Вернуться в «Python»