数字图像处理之边缘检测
来源:互联网 发布:2015网络神曲 编辑:程序博客网 时间:2024/06/11 12:33
边缘检测即将原图像中景物或人物等的边缘(轮廓)的检测。
其实边缘检测和锐化真的比较相近,只是程度不同而已。通过对边缘点做灰度差分即可得到边缘。(可参考上一博)
通常为了让效果更佳明显,会做一个二值化。
至于二值化的方法也有很多种,比如全局的二值化的Ostu算法,迭代算法,大津法等,还有自适应的二值化等,之后的文章会详细进行介绍。
对于边缘检测 同样可以使用拉普拉斯算子,Kirsh算子,Canny算子等。
拉普拉斯算子Kirsh算子之一
Canny算子之一
以下是以Kirsh算子为例做卷积对图像进行边缘检测:其中最后使用了二值化使效果更明显。
#Kirsch算子边缘化def Kirsch(): global edgeImage kir = [ 5 , -3 , -3, -3 , 0 , 5, -3 , 5 , -3 ] image = originalImage.convert('L'); h,w = image.size opix = image.load() processImage = Image.new('L' , (h,w)) npix = processImage.load() total = 0 for i in range(h): for j in range(w): f11 = opix[abs(i - 1) , abs(j - 1)] f12 = opix[abs(i - 1) , j] if j != w - 1: f13 = opix[abs(i - 1) , j + 1] else: f13 = opix[abs(i - 1) , j] f21 = opix[i , abs(j - 1)] f22 = opix[i , j] if j != w - 1: f23 = opix[i , j + 1] else : f23 = opix[i , j] if i != h - 1: f31 = opix[i + 1 , abs(j - 1)] else: f31 = opix[i , abs(j - 1)] if i != h - 1: f32 = opix[i + 1 , j] else: f32 = opix[i , j] if i != h - 1 and j != w - 1: f33 = opix[i + 1 , j + 1] else : f33 = opix[i , j] temp = f11 * kir[0] + f12 * kir[1] + f13 * kir[2] + f21 * kir[3] + f22 * kir[4] + f23 * kir[5] + f31 * kir[6] + f32 * kir[7] + f33 * kir[8] npix[i,j] = temp; total += abs(temp) val = total / (h * w) * 1.618 edgeImage = processImage.convert('L') for i in range (h): for j in range (w): if (npix[i,j] < val): npix[i,j] = 0 else : npix[i,j] = 255
以下是效果图:
原图
边缘检测图:
拉普拉斯
Kirsh
canny
二值化后的图像
拉普拉斯
kirsh
canny
0 0
- 数字图像处理之边缘检测
- 数字图像处理 边缘检测
- 数字图像处理之边缘检测,图像分割
- 数字图像处理之sobel边缘检测
- 数字图像处理:8.边缘检测
- 【数字图像处理之三】拉普拉斯边缘检测算法
- 数字图像处理成长之路7:边缘检测(sobel canny)
- 数字图像处理--图像锐化和边缘检测
- 数字图像处理-图像的边缘检测
- 数字图像处理——边缘检测
- 数字图像之边缘检测(1)
- 数字图像之边缘检测(2)
- 数字图像的边缘检测
- 数字图像边缘检测算子
- 玩玩数字图像处理之边缘提取
- 转载:数字图像处理——边缘检测算子(MATLAB)
- 【数字图像处理】Canny边缘检测详解及编程实现
- 数字图像处理-边缘检测-Sobel算子及cvSobel
- 以移动浦发联名挂件卡解析qPBOC应用
- 【IC卡读写】
- Android 资源类型 整理
- mysql之alter
- QT OpenGL 配置问题解决
- 数字图像处理之边缘检测
- 【TLV格式及编码】
- Jquery小结
- iOS简单的本地化应用程序
- Reorder List
- System类
- (14)堆
- I/O流
- Button中默认的padding