图像的二阶微分算子

Laplacian微分算子

定义

最单间的各项同性微分算子是拉普拉斯算子,一个二维图像f(x,y)的拉普拉斯微分算子的定义如下:


图像的二阶微分算子_第1张图片
将(2)(3)式代入(1)式得

写成权系数矩阵模板为

图像的二阶微分算子_第2张图片

效果如下:

图像的二阶微分算子_第3张图片

算法源代码(java)

/**
	 * 二阶微分算子  laplacian算子方法
	* @param srcPath 图片的存储位置
	 * @param distPath 图像要保存的存储位置
	 * @param formatName 图像要保存的存储位置
	 */
	public static void laplacian0(String srcPath, String distPath, String formatName) {
		BufferedImage img = readImg(srcPath);		
		int w = img.getWidth();
		int h = img.getHeight();
		int pix[] = new int[w*h];
		        pix= img.getRGB(0, 0, w, h, pix, 0, w);
		pix = laplacian0(pix, w, h);
		img.setRGB(0, 0, w, h, pix, 0, w);
		writeImg(img, formatName, distPath);
	}
	/**
	 * 二阶微分算子  laplacian算子方法
	 * @param pix 像素矩阵数组
	 * @param w 矩阵的宽
	 * @param h 矩阵的高
	 * @return 处理后的数组
	 */	 
	public static int[] laplacian0(int[] pix, int w, int h) {
		int[] newpix = new int[w*h];
		ColorModel cm = ColorModel.getRGBdefault();
		int r;
		for(int y=0; y<h; y++) {
			for(int x=0; x<w; x++) {
				if(x!=0 && x!=w-1 && y!=0 && y!=h-1) {
					//G = 4f(x,y) - f(x-1,y) - f(x+1,y) - f(x,y-1) - f(x,y+1)
					r = 4*cm.getRed(pix[x+(y)*w]) - cm.getRed(pix[x-1+(y)*w]) - cm.getRed(pix[x+1+(y)*w])
					- cm.getRed(pix[x+(y-1)*w]) - cm.getRed(pix[x+(y+1)*w]);					
					newpix[x+y*w] = 255<<24 | r<<16 | r<<8 | r;
				}
			}
		}
		int temp = findMinInt(newpix);
		for(int i=0; i<newpix.length; i++) {
			newpix[i] = newpix[i] + temp;
		}
		return newpix;
		
	}


还有几种laplacian算子的变形,如下

图像的二阶微分算子_第4张图片  图像的二阶微分算子_第5张图片  图像的二阶微分算子_第6张图片

对应的效果如下:

图像的二阶微分算子_第7张图片  图像的二阶微分算子_第8张图片   图像的二阶微分算子_第9张图片

L1                                                          L2                                                                L3

从以上几个效果可以看出,L1与L0算子的效果基本相同,肉眼很难分辨;L2获得的细节信息较弱;L3处理的结果是图像的纹里比原图更清晰。

你可能感兴趣的:(图像的二阶微分算子)