originalImageArray = new int[width*height];
bufferedImage.getRGB(0, 0, width, height,
originalImageArray, 0, width);
3. 将根据图像中每个像素的 RGB 值转换为对应的灰度值,并导出灰度图像:
grayValueArray = new int[width*height];
ColorModel cm = ColorModel.getRGBdefault();
for(int i=0; i<originalImageArray.length; i++){
int r = cm.getRed(originalImageArray[i]);
int g = cm.getGreen(originalImageArray[i]);
int b = cm.getBlue(originalImageArray[i]);
int gray = (r*299 + g*587 + b*114 + 500) /
1000;
grayValueArray[i] = gray;
originalImageArray[i] = 255 << 24|gray << 16|
gray << 8|gray;
}
getImageByArray(new File("E:\\gray.jpg"),
originalImageArray, "jpg");
4. 根据灰度图像的像素的灰度值的分布,绘制直方图,直方图数据使用
HashMap 对象进行保存,既可以记录每个灰度值的像素个数,还可以记录所有
灰度值对应的像素点位置,方便均衡化直方图时的计算:
histogram = new HashMap<Integer,
ArrayList<Integer>>();
for(int i=0; i<256; i++){
histogram.put(i, new ArrayList<Integer>());
}
for(int i=0; i<grayValueArray.length; i++){
histogram.get(grayValueArray[i]).add(i);
}
showHistogram(histogram);
5. 使 用 公 式 将 直 方
图均衡化,并绘制均衡
化后的直方图:
equalization = new HashMap<Integer,
ArrayList<Integer>>();//用于存储均衡化后各个灰度值,以及对应的像
素点位置
for(int i=0; i<256; i++){
equalization.put(i, new
ArrayList<Integer>());//初始化
}
for(int i=0; i<256; i++){
int s = sigama(255, 0, i);