您的位置:首页 > 其它

andrid图像处理系统1.3.0图像的直方图均衡

2012-08-30 18:25 295 查看
最终版源代码:https://github.com/nuptboyzhb/AndroidImageProSystem
图像处理结果:



相关博客:http://blog.csdn.net/nuptboyzhb/article/details/7925994
在ImageProcess.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;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图像处理 matrix null