数字图像处理:边缘检测整理

形态学边缘提取

在这里插入图片描述
实现代码:

def contour_morphology(image):
    return image - cv2.erode(image, np.ones((3, 3), np.uint8))

实现很简单,原图减腐蚀的图

结果

在这里插入图片描述
为了去除房顶瓦片,对其进行均值平滑处理后的结果

mask_averaging = np.array([
    [1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1],
], np.float)/25
house_averaging = cv2.filter2D(house, -1, mask_averaging)
house_contour_morphology = contour_morphology(house_averaging )

结果

在这里插入图片描述
在这里插入图片描述
虽然瓦片被去除了,可是轮廓边粗了,房顶边缘变弱

线的检测

mask_45 = np.array([
    [-1, -1,  2],
    [-1,  2, -1],
    [2,  -1, -1],
])

house_segment_45 = cv2.filter2D(house_contour_morphology, -1, mask_45)
mask__45 = np.array([
    [2, -1, -1],
    [-1, 2, -1],
    [-1, -1, 2],
])
house_segment__45 = cv2.filter2D(house_contour_morphology, -1, mask__45)
mask_0 = np.array([
    [-1, -1, -1],
    [2,   2,  2],
    [-1, -1, -1],
])
house_segment_0 = cv2.filter2D(house_contour_morphology, -1, mask_0)

用上一步的输出house_contour_morphology作为输入:

结果

在这里插入图片描述
方向固定,不能很好的检测直线

梯度算子

mask_sobel_horizontal = np.array([
    [-1, -2, -1],
    [0,   0,  0],
    [1,   2,  1],
])
mask_sobel_vertical = np.array([
    [-1, 0, 1],
    [-2, 0, 2],
    [-1, 0, 1],
])

mask_sobel_diagonal = np.array([
    [-2, -1, 0],
    [-1, 0,  1],
    [0,  1,  2],
])

house_sobel_horizontal = cv2.filter2D(house_contour_morphology, -1, mask_sobel_horizontal)
house_sobel_vertical = cv2.filter2D(house_contour_morphology, -1, mask_sobel_vertical)
house_sobel_diagonal = cv2.filter2D(house_contour_morphology, -1, mask_sobel_diagonal)
plt_show_opcv("house_sobel", house_sobel)
用上一步的输出house_contour_morphology作为输入:
### 结果

在这里插入图片描述

霍夫/Hough变换

edges = cv2.Canny(house_contour_morphology, 50, 20)
re = np.zeros(house.shape, np.uint8)
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 30, minLineLength=30, maxLineGap=5)
lines = lines[:, 0, :]
for x1, y1, x2, y2 in lines:
    cv2.line(re, (x1, y1), (x2, y2), (255, 255, 255), 1)

先用Canny算法进行边缘检测,再用霍夫变换检测直线轮廓。用上一步的输出house_contour_morphology作为输入:

结果

在这里插入图片描述
原图作为输入:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值