Сравнение цветов двух изображений с использованием Matlab - PullRequest
0 голосов
/ 01 мая 2010

Можно ли сравнить цвет двух изображений с помощью Matlab, если два изображения имеют разные размеры? Проблема, с которой я столкнулся, заключается в том, что я хочу обнаружить наличие цветного пятна на изображении?

Ответы [ 3 ]

1 голос
/ 01 мая 2010

Вы могли бы просто сравнить нормализованные гистограммы (то есть, как распределение вероятности цвета). Если большие и маленькие изображения семантически идентичны, то их нормализованные гистограммы похожи.

Если они семантически отличаются, то их гистограммы будут вероятными отличаться.

1 голос
/ 02 мая 2010

У вас есть набор инструментов для обработки изображений? Если это так, вы можете решить проблему, взяв изображения, разделив их на цветовые каналы их компонентов, изменив размеры отдельных каналов и повторно собрав их в цветные изображения с измененным размером. Я написал программу для этого некоторое время назад, и я помню код, похожий на этот:

function imout = ResizeRGB(imin,height,width)
imout = zeros(height,width,3);

iminR = imin(:,:,1);
iminG = imin(:,:,2);
iminB = imin(:,:,3);

imoutR = imresize(iminR, [height width]);
imoutG = imresize(iminG, [height width]);
imoutB = imresize(iminB, [height width]);

imout(:,:,1) = imoutR;
imout(:,:,2) = imoutG;
imout(:,:,3) = imoutB;

(Поскольку на данный момент у меня нет удобного IPT, эту программу следует рассматривать как псевдокод, даже если она более или менее имеет правильный синтаксис Matlab. Я не могу запустить ее без IPT, поэтому не могу сказать если глючит или нет.)

После того, как вы измените размеры изображений, чтобы они имели общие размеры, проблема становится идентичной проблеме сравнения цветов для двух изображений одинакового размера.

С другой стороны, если у вас есть изображение патча и изображение, которое может содержать патч, вы можете рассмотреть возможность использования двоичной маски для порогового значения результатов взаимной корреляции (xcorr2 в IPT). Для получения дополнительной информации об этом подходе на веб-сайте MathWorks есть учебное руководство: http://www.mathworks.com/products/demos/image/cross_correlation/imreg.html

0 голосов
/ 01 мая 2010

Это немного грубовато, но вы можете обрезать изображения до минимального общего размера, если этого будет достаточно для вашего приложения:

A = imread("image1.jpg");
B = imread("image2.jpg");

rows = min(size(A,1), size(B,1));
cols = min(size(A,2), size(B,2));

croppedA = A(1:rows, 1:cols, :);
croppedB = B(1:rows, 1:cols, :);
...