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

Теперь в отношении этого изображения мне нужно определить, следующие изображения имеют однородную текстуру и распределение цветов –
изображение 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()
Затем я начал анализировать изображения на предмет их цвета. Я построил цветовые гистограммы, используя 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"))
Но это довольно простой подход, и я понятия не имею о ложном положительные моменты, которые он будет соответствовать. Более того, я не знаю, какой подход к проблеме является лучшим.
Я также хочу, чтобы это было сделано с помощью единого и надежного алгоритма, такого как CNN (но не следует быть слишком дорогим в вычислительном отношении). Но у меня нет опыта работы с CNN. Так стоит ли мне обучать CNN мастер-изображениями? Пожалуйста, укажите мне правильное направление. Я также сталкивался с LBCNN, могут ли они решить проблему? И какие могут быть другие подходы лучше?
Большое спасибо за помощь
Подробнее здесь: https://stackoverflow.com/questions/541 ... e-in-image