【问题标题】:comparing two image using histogram使用直方图比较两个图像
【发布时间】:2011-03-29 16:30:37
【问题描述】:

我想找到两个图像的直方图并使用欧几里得距离找到相似度。我正在尝试使用imhist 命令,但它给出了以下错误:

Error using ==> iptcheckinput
Function IMHIST expected its first input, I or X, to be two-dimensional.

我的代码如下:

% read two images
Im1 = imread('1.jpg');
Im2 = imread('2.jpg');

%  convert images to type double (range from from 0 to 1 instead of from 0 to 255)
Im1 = im2double(Im1);
Im2 = im2double(Im2);

% Calculate the Normalized Histogram of Image 1 and Image 2
hn1 = imhist(Im1)./numel(Im1);
hn2 = imhist(Im2)./numel(Im2);

% Calculate the histogram error
f = sum((hn1 - hn2).^2);
f; %display the result to console

【问题讨论】:

    标签: matlab


    【解决方案1】:

    实际上,直方图旨在表示单个通道的色调值的重新划分。彩色图像通常是 3 通道图像(大多数情况下是红色、绿色、蓝色)。

    Ghaul 的方法应该可以正常工作。如果想要更精确,可以提取每个通道并计算其直方图:

    Red1 = Im1(:, :, 1);
    Green1 = Im1(:, :, 2);
    Blue1 = Im1(:, :, 3);
    HnBlue1 = imhist(Blue1)./numel(Blue1);
    

    您现在可以根据 3 个欧几里德距离(每个通道 1 个)定义评估函数:

    FBlue = sum((HnBlue1 - HnBlue2).^2);
    FRed= sum((HnRed1 - HnRed2).^2);
    ...
    F = Alpha*FBlue + Beta*FRed + Gamma*FGreen //as an example
    

    因此,您可以在距离定义中强调一种颜色或另一种颜色。如果您要测试的图像具有特定颜色,这可能会很有用。

    这是 Ghaul 方法的替代方法,但其等效方法是将 Alpha、Beta 和 Gamma 设置为“0.2989 * R + 0.5870 * G + 0.1140 * B”,如 Andrey 所述。

    【讨论】:

    • 好帖子!但是 rgb2gray 并不平等对待所有通道。 - “0.2989 * R + 0.5870 * G + 0.1140 * B”
    【解决方案2】:

    我猜您的图像是彩色图像,即具有三个通道。将它们减少到一个通道灰度图像做

    Im1 = rgb2gray(Im1);
    Im2 = rgb2gray(Im2);
    
    hn1 = imhist(Im1)./numel(Im1);
    hn2 = imhist(Im2)./numel(Im2);
    

    等等。

    或者,如果您想处理所有颜色通道,您可以在执行 imhist 之前将图像拉伸为矢量,即,只需执行

    hn1 = imhist(Im1(:))./numel(Im1);
    hn2 = imhist(Im2(:))./numel(Im2);
    

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2011-06-18
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多