Python图像处理之边缘检测

来源:互联网 发布:最终幻想雷霆身材数据 编辑:程序博客网 时间:2024/05/18 10:29

在图像识别中,需要有边缘鲜明的图像,即图像锐化。图像锐化的目的是为了突出图像的边缘信息,加强图像的轮廓特征,以便于人眼的观察和机器识别。
在空间域进行图像锐化主要有以下几种方法:
1、梯度算子
图像的边缘最直观的表现就是边缘两侧的灰度值相差比较大,在微积分中我们学过梯度的概念

梯度是一个列向量,可表示为:这里写图片描述
而某点处梯度的模很好的反应了该点两侧的变化大小

所以,梯度值很大的点也就代表了图像的边缘

而在实际计算中,为了降低运算量,一般用一下两种方法来代替模运算
这里写图片描述

由于数字图像处理中处理的是数字离散信号

所以,我们用差分来等同于连续信号中的微分运算

典型的梯度运算有
这里写图片描述
而另一种称为Roberts梯度的差分运算可由下来表示:
这里写图片描述

Python测试代码如下:

__author__ = 'Administrator'import cvdef Sharp(image,flag1=0,flag2=0):    w = image.width    h = image.height    size = (w,h)    iSharp = cv.CreateImage(size,8,1)    for i in range(h-1):        for j in range(w-1):            if flag2 == 0:                x = abs(image[i,j+1]-image[i,j])                y = abs(image[i+1,j]-image[i,j])            else:                x = abs(image[i+1,j+1]-image[i,j])                y = abs(image[i+1,j]-image[i,j+1])            if flag1 == 0:                iSharp[i,j] = max(x,y)            else:                iSharp[i,j] = x+y    return iSharpimage = cv.LoadImage('18.jpg',0)iMaxSharp = Sharp(image)iAddSharp = Sharp(image,1)iRMaxSharp = Sharp(image,0,1)iRAddSharp = Sharp(image,1,1)cv.ShowImage('iMaxSharp',iMaxSharp)cv.ShowImage('image',image)cv.ShowImage('iAddSharp',iAddSharp)cv.ShowImage('iRAddSharp',iRAddSharp)cv.ShowImage('iRMaxSharp',iRMaxSharp)cv.WaitKey(0)

我们来看看运行结果:
这里写图片描述这里写图片描述
这里写图片描述

1 0
原创粉丝点击