比较2个图像强度

时间:2014-02-06 15:54:27

标签: image matlab

我有两张图像1和2.我想获得hsv图像的v(强度)值;那么我想第一张图像的v(强度)值等于第二张图像的v(intesity)值?

我使用此代码获取v

v = image1(:, :, 3);
u = image2(:, :, 3);

如何将u和v设为相同的值?

谢谢,

1 个答案:

答案 0 :(得分:0)

听起来你想要做某种直方图均衡。作为第一次尝试,您可以尝试使用Matlab的histeq函数。 (您还应该阅读imhist的文档。)为了使image1中的强度值更接近image2中的强度值(它们几乎肯定永远不会相同),您可以执行类似的操作这样:

v = image1(:, :, 3);
u = image2(:, :, 3);
targetHist = imhist(u);
newV = histeq(v, targetHist);
newImage1 = cat(3, image1(:, :, 1), image1(:, :, 2), newV);
    % or, alternatively %
image1(:, :, 3) = newV;

如果此技术无法提供您所需的结果,您可以使用其他直方图均衡方法,包括按区域均衡强度的自适应技术。

编辑:

这里有一些代码正在做什么。有关详细信息,请查看上面提到的histeq链接的算法部分。

给定HSV格式的参考图像(在本例中为image2),我们采用值通道(或强度或亮度通道)并使用imhist来划分强度级别。将图像分成256个区间(默认情况下),每个区域包含具有该强度值的像素数。

此用法中的

histeq实际上是histogram matching。它计算第二个图像的直方图,并尝试“匹配”输入直方图。例如,如果直方图的所有区域都是空的,除了具有300个像素的区域100,并且您的图像的所有区域都是空的,除了具有300个像素的区域80之外,histeq将增加强度图像中每个像素的数量为20个。这是一个非常简单的例子,但希望你能得到这个想法。

绘制image1,image2和均衡直方图的3个直方图非常有用,可以看出image1的强度级别是如何变化的。