java 图像灰度直方图

来源:互联网 发布:古力娜扎长相知乎 编辑:程序博客网 时间:2024/06/09 23:41

希望你了解下 <前言>

上一篇文章中,已经说过了图像的灰度化,灰度化之后,我们希望了解像素在0-255的分布情况。这就是我们下面要说的图像的灰度直方图,这是最简单的一种。但是原理都是一样的。图像的直方图有大量的用处,它反应了图像的某些特征,以至于可以用来进行图像搜索。

获得直方图信息代码如下:

public int[] hist(){toGray();int[] hist = new int[256];int len = h*w;for(int i=0;i<len;i++)hist[data[i]]++;return hist;}

然后我们要做的就是画出图像的统计直方图,代码如下:

public BufferedImage getHist(){toGray();int[] intensity = hist();int size = 300;BufferedImage pic = new BufferedImage(size,size, BufferedImage.TYPE_4BYTE_ABGR);Graphics2D g2d = pic.createGraphics();          g2d.setPaint(Color.BLACK);          g2d.fillRect(0, 0, size, size);          g2d.setPaint(Color.WHITE);          g2d.drawLine(5, 250, 265, 250);          g2d.drawLine(5, 250, 5, 5);                     g2d.setPaint(Color.GREEN);          int max = math.findMaxValue(intensity);  //找到直方图中最大的值        float rate = 200.0f/((float)max);          int offset = 2;          for(int i=0; i<intensity.length; i++) {              int frequency = (int)(intensity[i] * rate);              g2d.drawLine(5 + offset + i, 250, 5 + offset + i, 250-frequency);          }                     g2d.setPaint(Color.RED);          g2d.drawString("", 100, 270);         return pic;}

以上代码参考了 图像分析之直方图分析

运行结果如下:

                       

0 0
原创粉丝点击