使用matlab对两个图像进行颜色比较

时间:2010-04-30 20:15:45

标签: matlab comparison colors

如果这两个图像的大小不同,是否可以使用Matlab比较两个图像的颜色?面临的问题是,我想检测图像中是否存在彩色色块?

3 个答案:

答案 0 :(得分:1)

您可以只比较标准化的直方图(即,像颜色概率分布)。如果大图像和小图像在语义上相同,则它们的标准化直方图是相似的。

如果它们在语义上不同,那么它们的直方图可能不同。

答案 1 :(得分:1)

你有图像处理工具箱吗?如果是这样,您可以通过拍摄图像,将它们分成组件颜色通道,调整各个通道的大小,并将它们重新组合成调整大小的彩色图像来解决问题。我之前写了一个程序来做这件事,我记得代码看起来像这样:

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的情况下运行它,所以我分不清楚如果它是有缺陷的。)

一旦调整图像大小以使它们具有共同的尺寸,问题就会变得与两个相同尺寸图像的颜色比较问题相同。

另一方面,如果您有补丁的图片和可能包含补丁的图片,您可以考虑使用二进制掩码来阈值互相关的结果(IPT中的xcorr2)。有关该方法的更多信息,MathWorks网站上有一个教程:http://www.mathworks.com/products/demos/image/cross_correlation/imreg.html

答案 2 :(得分:0)

这有点粗糙,但是如果这对您的应用来说足够了,您可以将图像裁剪到最小的常用尺寸:

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, :);