首页IT科技图像边缘检测的应用(图像边缘检测)

图像边缘检测的应用(图像边缘检测)

时间2025-08-03 07:54:34分类IT科技浏览4517
导读:前言   有了图像放大缩小,图像灰度化处理等相关基础知识过后,就可以进行图像边缘检测了。边缘检测最后也会在FPGA上面实现,此处小编已经控制不住要剧透了。也是一样,先从软件的角度来理解这些图像边缘检测算法。...

前言

  有了图像放大缩小             ,图像灰度化处理等相关基础知识过后                      ,就可以进行图像边缘检测了                。边缘检测最后也会在FPGA上面实现        ,此处小编已经控制不住要剧透了                     。也是一样          ,先从软件的角度来理解这些图像边缘检测算法      。

一                、图像边缘检测

  边缘检测原理如下动态图所示            。假如你有一些别人发明的算子                     ,算子在第二章介绍                      。使用算子在原图上进行扫描            ,算子中的值乘以对应的像素值       ,然后加起来就行了         。你可以使用截图工具                    ,截取动态图                ,计算一下是否正确        。

二                     、边缘检测算子

  算子其实就是滤波器    ,在深度学习里面又叫卷积                    ,下面3种算子给出了具体的值                    ,而在卷积神经网络里面,卷积核的值是需要训练得到                       。

1. Roberts算子

G

x

=

[

1

1

]

G

y

=

[

1

1

]

G_x = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} \quad\quad\quad G_y = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}

Gx=[1001]Gy=[0110]

2. Prewitt算子

G

x

=

[

1

1

1

1

1

1

]

G

y

=

[

1

1

1

1

1

1

]

G_x = \begin{bmatrix} -1 & 0 & 1\\ -1 & 0 & 1\\ -1 & 0 & 1 \end{bmatrix} \quad\quad\quad G_y = \begin{bmatrix} -1 & -1 & -1\\ 0 & 0 & 0\\ 1 & 1 & 1 \end{bmatrix}

Gx=111000111Gy=101101101

3. Sobel算子

G

x

=

[

1

+

1

2

+

2

1

+

1

]

G

y

=

[

+

1

+

2

+

1

1

2

1

]

G_x = \begin{bmatrix} -1 & 0 & +1\\ -2 & 0 & +2\\ -1 & 0 & +1 \end{bmatrix} \quad\quad\quad G_y = \begin{bmatrix} +1 & +2 & +1\\ 0 & 0 & 0\\ -1 & -2 & 1 \end{bmatrix}

Gx=121000+1+2+1Gy=+101+202+101

三      、代码实现

# robert算子 robert_x = np.array([[1, 0], [0, -1]]) robert_y = np.array([[0, -1], [1, 0]]) # prewitt算子 prewitt_x = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]]) prewitt_y = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]]) # sobel算子 sobel_x = np.array([[-1, 0, +1], [-2, 0, +2], [-1, 0, +1]]) sobel_y = np.array([[+1, +2, +1], [0, 0, 0], [-1, -2, -1]]) # 图像灰度处理 def weight_gray(image): weight_image = image[:, :, 0] * 0.11 + image[:, :, 1] * 0.59 + image[:, :, 2] * 0.3 weight_image = weight_image.astype(np.uint8) return weight_image # 图像边缘检测 def edge_dimage(image, operator): shape = image.shape h, w = shape sh, sw = operator[0].shape sobel_image = np.zeros(image.shape) for i in range(h - sh): for j in range(w - sw): ix = np.multiply(image[i: i + sh, j: j + sw], operator[0]) iy = np.multiply(image[i: i + sh, j: j + sw], operator[1]) ix = np.sum(ix) iy = np.sum(iy) ig = np.sqrt(ix ** 2 + iy ** 2) sobel_image[i, j] = ig sobel_image = sobel_image.astype(np.uint8) return sobel_image image = cv2.imread("three_body.jpg") gray = weight_gray(image) roimage = edge_dimage(gray, (robert_x, robert_y)) primage = edge_dimage(gray, (prewitt_x, prewitt_y)) sbimage = edge_dimage(gray, (sobel_x, sobel_y)) # 画子图 plt.figure(figsize=(10, 7)) plt.subplot(221) plt.title("gray") plt.imshow(gray, cmap=gray) plt.subplot(222) plt.title("sobel") plt.imshow(sbimage, cmap=gray) plt.subplot(223) plt.title("roberts") plt.imshow(roimage, cmap=gray) plt.subplot(224) plt.title("prewitt") plt.imshow(primage, cmap=gray)

总结

  这大概就是卷积神经网络的由来                ,以前叫做算子                       ,现在叫做卷积            。小编也迫不及待的想要动手实现卷积神经网络了(numpy)    ,敬请期待    。

声明:本站所有文章             ,如无特殊说明或标注                      ,均为本站原创发布                        。任何个人或组织        ,在未征得本站同意时          ,禁止复制            、盗用                      、采集         、发布本站内容到任何网站        、书籍等各类媒体平台                。如若本站内容侵犯了原著者的合法权益                     ,可联系我们进行处理。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
开原吧 百度贴吧(开原官网) 打地鼠音乐动画(前端搭建砸地鼠游戏(内附源码))