andrid图像处理系统1.3.0图像的直方图均衡
图像处理结果:
在ImageProcess.java中添加如下代码:
[java]
/*
*直方图均衡化
*/
public Bitmap histEqualize(Bitmap myBitmap){
// Create new array
int width = myBitmap.getWidth();
int height = myBitmap.getHeight();
int[] pix = new int[width * height];
myBitmap.getPixels(pix, 0, width, 0, 0, width, height);
Matrix dataR=getDataR(pix, width, height);
Matrix dataG=getDataG(pix, width, height);
Matrix dataB=getDataB(pix, width, height);
//Matrix dataGray=getDataGray(pix, width, height);
/////////////////////////////////////////////////////////
dataR=eachEqualize(dataR,width,height);
dataG=eachEqualize(dataG,width,height);
dataB=eachEqualize(dataB,width,height);
///////////////////////////////////////////////////////////////
// Change bitmap to use new array
Bitmap bitmap=makeToBitmap(dataR, dataG, dataB, width, height);
myBitmap = null;
pix = null;
return bitmap;
}
private Matrix eachEqualize(Matrix temp,int width,int height){
// 灰度映射表
int bMap[]=new int[256];
// 灰度映射表
int lCount[]=new int[256];
// 重置计数为0
int i,j;
for (i = 0; i < 256; i ++){
// 清零
lCount[i] = 0;
}
// 计算各个灰度值的计数 - 参考灰度直方图的绘制代码 (对话框类中)
for (i = 0; i < height; i ++){
for (j = 0; j < width; j ++){
lCount[(int)temp.get(i, j)]++; // 计数加1
}
}
// 计算灰度映射表
for (i = 0; i < 256; i++){
// 初始为0
int Temp = 0;
for (j = 0; j <= i ; j++){
Temp += lCount[j];
}
// 计算对应的新灰度值
bMap[i] = (int) (Temp * 255 / height / width);
}
// 每行
for (i = 0; i < height; i++){
// 每列
for (j = 0; j < width; j++){
temp.set(i, j, bMap[(int)temp.get(i,j)]);
}
}
return temp;
}
补充:移动开发 , Android ,