记录研究生封校生活的学习day22(第二篇)二阶边缘检测算子

102 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情

总计:今天是十月更文计划第二十二天,第四十篇

拉普拉斯算子特点:

它是二阶导数,对噪声非常敏感。

拉普拉斯算子的幅值产生双边缘(最小负值和最大正值);

不能检测边缘的方向(无方向模板);

在分割中所起的作用:

利用它的零交叉性质进行边缘预定位;

确定一个像素在边缘暗的一边还是亮的一边。

先平滑图像,然后再用拉氏算子检测边缘,以克服二阶微分算子对噪声敏感的问题。

图像与高斯函数卷积进行滤波:

image.png

对结果进行拉式算子卷积:

image.png

实验结果如下:

image.png

边缘接续和闭合

1)边缘接续的目的

边缘接续的目的是要把间断的边连接起来形成封闭的边界。

2)局部接续处理的原理

分析边缘检测结果中的每个点(x,y)的特性;在一个小的邻域(3x3 或 5x5)中把所有相似的点连接起来,形成一个具有共同特性区域的边界。

Hough变换

(2)基本原理 基本思想:利用一个空间和另一个空间的对偶关系,把原空间中的问题转换到它的对偶空间去求解,在对偶空间里问题变得相对简单。

Hough变换检测直线的基本原理

找出一部分直线上的点 把每个点都对偶到参数空间 找参数空间中这些线的交点

准备阶段

image.png

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')
`