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

最终版源代码: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; 
	}


 

你可能感兴趣的:(null,Matrix,图像处理)