最終版源代碼:https://github.com/nuptboyzhb/AndroidImageProSystem
圖像處理結果:
/*
*直方圖均衡化
*/
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;
}