MATLAB - 两幅图像的直方图匹配

时间:2012-10-24 22:14:40

标签: matlab histogram matching

我需要编写一个函数,它将image2的直方图与将要重新映射的图像相匹配,我们称之为image1。但我不允许使用histeq。你能帮我解释一下代码吗?

ps:另外我想知道如果我被允许使用histeq,我该怎么做?提取红绿蓝通道后,我该怎么办? (我无法使用histeq(R2,R1)?)

image1 = imread('color1.jpeg');
image2 = imread('color2.jpeg');

R1 = image1(:, :, 1);
G1 = image1(:, :, 2);
B1 = image1(:, :, 3);

R2 = image2(:, :, 1);
G2 = image2(:, :, 2);
B2 = image2(:, :, 3); 

此致 Amadeus的

2 个答案:

答案 0 :(得分:0)

我认为这个问题不够具体。解决此问题的一种方法是将三个通道转换为灰度图像(rgb2gray),计算两个直方图(hist),然后在直方图之间找到所需的映射并将其应用于每个通道原始图像。

无需转换为灰度,您可以在每个通道上执行此算法,然后再将通道连接在一起。

选中使用histq的{​​{3}}。

答案 1 :(得分:0)

直方图匹配算法由3个阶段组成: 1-compute标准化第一图像的CDF(T(r))。 2-compute标准化第二图像的CDF(G(z))。 3 - 计算G ^ -1(T(r))并将第一图像的变换强度值变为所需的值。