灰度图像的直方图

Posted 爽朗的sunmeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了灰度图像的直方图相关的知识,希望对你有一定的参考价值。

主要代码如下:
package chapter6;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;

/**

  • Created by LENOVO on 18-2-1.
    */
    public class Histogram extends AbstractBufferedImageOp {

    public BufferedImage filter(BufferedImage src,BufferedImage dest){
    int[] histogram = new int[256];
    int width = src.getWidth();
    int height = src.getHeight();
    if(dest == null){
    dest = creatCompatibleDestImage(src,null);
    }
    int[] inPixels = new int[width*height];
    getRGB(src,0,0,width,height,inPixels);

    //获取直方图数据
    for(int i=0;i<histogram.length;i++){
        histogram[i] = 0;
    }
    int index = 0;
    for(int row=0;row<height;row++){
        int tr = 0;
        for(int col=0;col<width;col++){
            index = row*width+col;
            tr = (inPixels[index] >> 16) & 0xff;
            histogram[tr] ++;
        }
    }
    double maxFrequency = 0;//计算像素出现的最大频率值
    for(int i=0;i<histogram.length;i++){
        maxFrequency = Math.max(histogram[i],maxFrequency);
    }
    //绘制直方图
    Graphics2D g2d = dest.createGraphics();
    g2d.setPaint(Color.LIGHT_GRAY);
    g2d.fillRect(0,0,width,height);
    
    //绘制XY轴
    g2d.setPaint(Color.black);
    g2d.drawLine(50,50,50,height-50);
    g2d.drawLine(50,height-50,width-50,height-50);
    //绘制XY轴标题
    g2d.drawString("0",50,height-30);
    g2d.drawString("255",width-50,height-30);
    g2d.drawString("0",20,height-50);
    g2d.drawString(""+maxFrequency,20,50);
    //绘制坐标轴刻度
    double xunit = (width-100)/255;
    double yunit = (height-100)/maxFrequency;
    for(int i=0;i<histogram.length;i++){
        double xp = 50+xunit*i;
        double yp = yunit*histogram[i];
        Rectangle2D rect2d = new Rectangle2D.Double(xp,height-50-yp,xunit,yp);
        g2d.fill(rect2d);
    }
    System.out.print(maxFrequency);
    return dest;

    }

}
测试代码同上

以上是关于灰度图像的直方图的主要内容,如果未能解决你的问题,请参考以下文章

如何用DIB绘制8位的灰度图像?绘出的灰度图像为啥出现蓝色和红色?

写一段代码画出一个图像的灰度直方图(不能用MATLAB自带的imhist函数),并作直方图均衡化处理。

图像的点运算----底层代码与Halcon库函数

对视频剪辑应用灰度图像变换+Moviepy生成灰度视频处理遇到几个有意思的问题

MATLAB-真彩色图像直方图均衡化及分别在RGB与HSI坐标系进行处理

用Python显示灰度图像的灰度直方图