为了提高图像的对比度,凸显边缘轮廓,通常可以使用一些梯度算子来进行图像增强,如roberts交叉算子,soble算子,laplace算子等。
假设图像用函数f(x,y)表示,那么处理的结果可以分别表示为:
g(x,y)=(|Gl|+|Gr|)*f(x,y)
g(x,y)=(|Gx|+|Gy|)*f(x,y)
g(x,y)=|G|*f(x,y)
作为例子,使用laplace算子对图像进行了处理,结果显示图中灰度变化缓慢的区域得到了抑制。左下图为原始图像,右下为处理结果
python代码如下:
from PIL import Image from numpy import * from pylab import * def imEnhance(im,kernel): r,c = im.shape kr,kc = kernel.shape im2 = zeros((r,c)) im3 = zeros((r+kr-1,c+kc-1)) for i in range(r): for j in range(c): im3[i+(kr-1)/2,j+(kc-1)/2]=im[i,j] for i in range(r): for j in range(c): im2[i,j]= sum(im3[i:i+kr,j:j+kc]*kernel) return im2 im =array(Image.open("lena.jpg").convert('L')) print im[0:3,0:3] gray() figure(1) imshow(im) laplace = array([[0,1,0],[1,-4,1],[0,1,0]]) im=imEnhance(im,laplace) min_val=im.min() max_val=im.max() im = (im-min_val)/(max_val-min_val)*255.0 figure(2) imshow(im) show()
为什么使用上面的3X3或2X2的算子就能起到高频增强的作用,怎么通过数学描述来理解这个处理过程呢?
假设f(x,y)的傅里叶变换为F(u,v)
Roberts算子和Sobel算子用于模拟一阶偏导df,laplace算子则对应于二阶偏导d^2f/dx^2+d^2f/dy^2.
数学推导过程如下:
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 14:00:54