持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情
总计:今天是十月更文计划第二十二天,第四十篇
拉普拉斯算子特点:
它是二阶导数,对噪声非常敏感。
拉普拉斯算子的幅值产生双边缘(最小负值和最大正值);
不能检测边缘的方向(无方向模板);
在分割中所起的作用:
利用它的零交叉性质进行边缘预定位;
确定一个像素在边缘暗的一边还是亮的一边。
先平滑图像,然后再用拉氏算子检测边缘,以克服二阶微分算子对噪声敏感的问题。
图像与高斯函数卷积进行滤波:
对结果进行拉式算子卷积:
实验结果如下:
边缘接续和闭合
1)边缘接续的目的
边缘接续的目的是要把间断的边连接起来形成封闭的边界。
2)局部接续处理的原理
分析边缘检测结果中的每个点(x,y)的特性;在一个小的邻域(3x3 或 5x5)中把所有相似的点连接起来,形成一个具有共同特性区域的边界。
Hough变换
(2)基本原理 基本思想:利用一个空间和另一个空间的对偶关系,把原空间中的问题转换到它的对偶空间去求解,在对偶空间里问题变得相对简单。
Hough变换检测直线的基本原理
找出一部分直线上的点 把每个点都对偶到参数空间 找参数空间中这些线的交点
准备阶段
Hough变换检测直线的特点
抗干扰能力强,在参数空间的累加计数是一个积分过程。 鲁棒性好,在真正待求的参数点处有非常明显的尖峰。 自动闭合:由边界曲线的参数可得整个曲线。 因此,利用Hough变换可排除干扰并完成曲线补充和接续。
代码如下:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('computer.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
orgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
oShow=orgb.copy()
lines = cv2.HoughLines(edges,1,np.pi/180,140)
for line in lines:
rho,theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
cv2.line(orgb,(x1,y1),(x2,y2),(0,0,255),2)
plt.subplot(121)
plt.imshow(oShow)
plt.axis('off')
plt.subplot(122)
plt.imshow(orgb)
plt.axis('off')
`