将多个图像直方图与处理进行比较

时间:2017-01-07 19:03:40

标签: image-processing processing

picture histogram

我对处理语言很陌生。我正在尝试创建一个图像比较工具。

想法是获得图片的直方图(参见下面的截图,尺寸为600x400),然后将其与其他10个相似图片的直方图(所有尺寸600x400)进行比较。直方图显示灰度级的频率分布,左侧显示纯黑值的数量,右侧显示纯白值的数量。

最后我应该得到一个"赢得"图片(具有最相似直方图的图片)。

下面您可以看到图像直方图的代码,类似于处理教程示例。

我的想法是为其他10张图片创建PImage []以创建直方图,然后创建if语句,但我不确定如何编码它。

有没有人知道如何继续或在哪里看?我找不到类似的帖子。

如果问题非常基本,请提前致谢并抱歉!

  size(600, 400);

    // Load an image from the data directory
    // Load a different image by modifying the comments

PImage img = loadImage("image4.jpg");
    image(img, 0, 0);
    int[] hist = new int[256];

    // Calculate the histogram

for (int i = 0; i < img.width; i++) {
      for (int j = 0; j < img.height; j++) {
        int bright = int(brightness(get(i, j)));
        hist[bright]++; 
      }
 }

    // Find the largest value in the histogram
    int histMax = max(hist);

    stroke(255);
    // Draw half of the histogram (skip every second value)

for (int i = 0; i < img.width; i += 2) {
      // Map i (from 0..img.width) to a location in the histogram (0..255)

int which = int(map(i, 0, img.width, 0, 255));
      // Convert the histogram value to a location between 
      // the bottom and the top of the picture

int y = int(map(hist[which], 0, histMax, img.height, 0));
      line(i, img.height, i, y);
    }

1 个答案:

答案 0 :(得分:1)

不确定您的问题是处理中的实施,还是您不知道如何比较直方图。我认为这是比较,因为其余部分非常直接。计算每个候选人的相似度并选出获胜者。

在网上搜索直方图比较,您会发现: http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/histogram_comparison/histogram_comparison.html

OpenCV实现了四种直方图相似性度量。

  

相关性

     

enter image description here

     

其中enter image description here和N是直方图箱的数量

  

卡方

     

enter image description here

  

交叉口

     

enter image description here

  

巴氏 - 距离

     

enter image description here

您可以使用这些措施,但我相信您也会找到其他内容。