天天看点

java 灰度直方图_灰度图像的直方图

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[i] = 0;

}

int index = 0;

for(int row=0;row

int tr = 0;

for(int col=0;col

index = row*width+col;

tr = (inPixels[index] >> 16) & 0xff;

histogram[tr] ++;

}

}

double maxFrequency = 0;//计算像素出现的最大频率值

for(int i=0;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

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;

}