图像的二阶微分算子

Laplacian微分算子

定义

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



将(2)(3)式代入(1)式得

写成权系数矩阵模板为


效果如下:


算法源代码(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算子的变形,如下

对应的效果如下:


L1 L2 L3

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值