码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【计算机视觉】不来试试图片轮廓提取?


    文章目录

    • 🚩 前言
    • 🍈 边缘提取原理
      • 卷积
      • 用特殊的卷积核进行轮廓提取
    • 🍏 开始轮廓提取
      • 代码


    🚩 前言

    最近学到了深度学习的卷积操作,在卷积神经网络出现之前,就已经有使用卷积核 (也叫滤波器),但那时的卷积核依靠人工的经验和知识来进行设计,而不能像卷积神经网络中那样让机器自己学习出合适的卷积核参数。

    下面就介绍通过卷积来获取图像轮廓图的操作。


    🍈 边缘提取原理

    卷积

    首先,图片是由像素点构成的。卷积的一个基本操作就是对应元素相乘然后再求和的操作,然后卷积核窗口在图片上不断滑动,就会得到一张新的“特征图”。 (我这里解释得比较草率,可以自行仔细了解一下卷积的过程)

    用特殊的卷积核进行轮廓提取

    这里使用一维的卷积核 [-1, 0, 1],可以提取图片的垂直边界。实际就是图片中邻近的像素点进行相减操作,边缘处两个像素点的差别很大,于是相减之后得到的值的绝对值就大,这就是我们提取出来的边缘。

    在这里插入图片描述
    效果展示:
    在这里插入图片描述

    通过改变卷积核的大小,可以改变提取出来的边缘的宽度,例如将卷积核改为:[-1, 0, 0, 1],得到的黑色边缘就更宽了。

    在这里插入图片描述


    🍏 开始轮廓提取

    这里使用下图中的卷积核,原理和之前的垂直边缘检测相似。前面的卷积核只能得到垂直边缘,而下图的卷积核则能得到完整的轮廓。

    在这里插入图片描述
    效果展示:
    在这里插入图片描述

    代码

    我这里卷积是通过 paddle 的库实现的,因此需要先安装 paddle。安装教程参加:paddle安装教程。
    如果觉得安装太麻烦也没关系,可以试试 AI Studio 的在线环境,已经内置了 paddle 库:AI Studio。点击项目->创建项目,就可以开始使用啦!

    导入依赖:

    import matplotlib.pyplot as plt
    from PIL import Image
    import numpy as np
    import paddle
    from paddle.nn import Conv2D
    from paddle.nn.initializer import Assign
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通过调整代码img = img.resize((200, 200), Image.ANTIALIAS)括号中的数值,你将得到不同的轮廓提取效果!(数值控制图片的尺寸)
    卷积核不变时,图片尺寸越大,提取的轮廓也就相对显得越细,就越不明显。而图片尺寸小时又会显得模糊,像打了马赛克。

    运行代码:

    # 输入图片
    img = Image.open('喵喵头像.jpg')  # 图片放在py文件相同目录下
    img = img.resize((200, 200), Image.ANTIALIAS)  # 采样,以得到指定大小的图片
    
    # 设置卷积核参数
    w = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')/8
    w = w.reshape([1, 1, 3, 3])
    w = np.repeat(w, 3, axis=1)  # 在通道上复制,得到[1,3,3,3]
    
    # 创建卷积算子
    conv = Conv2D(in_channels=3, out_channels=1, kernel_size=[3, 3],
                  weight_attr=paddle.ParamAttr(
                      initializer=Assign(value=w)
                  ))
    
    # 转换图片格式
    x = np.array(img).astype('float32')  # 读入shape[H,W,C]
    x = np.transpose(x, (2, 0, 1))  # 交换维度
    x = x.reshape((1, x.shape[-3], x.shape[-2], x.shape[-1]))  # Conv2D的输入需为四维张量
    x = paddle.to_tensor(x)
    
    # 卷积运算
    y = conv(x)
    out = y.numpy()
    
    # 画图
    plt.figure(figsize=(20, 10))
    f = plt.subplot(121)
    f.set_title('input image', fontsize=15)
    plt.imshow(img)
    f = plt.subplot(122)
    f.set_title('output image', fontsize=15)
    plt.imshow(out.squeeze(), cmap='gray')
    
    plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    完

    14天学习训练营导师课程:
    杨鑫《Python 自学编程基础》
    杨鑫《 Python 网络爬虫基础》
    杨鑫《 Scrapy 爬虫框架实战和项目管理》

  • 相关阅读:
    【已解决】电脑设置notepad++默认打开txt
    【JAVA】Request&Response
    代码随想录第35天 | ● 01背包问题,你该了解这些! ● 01背包问题—— 滚动数组 ● 416. 分割等和子集
    Leetcode 易错题整理(三)73. 77. 78. 81. 90. 95.105. 130.
    拉美巴西阿根廷媒体宣发稿墨西哥哥伦比亚新闻营销如何助推跨境出海推广?
    PlacementAlias
    笔记:Python 字符串与正则表达式(练习题)
    什么是快应用?与原生APP相比优势在哪里
    《最新出炉》系列入门篇-Python+Playwright自动化测试-43-分页测试
    Java可变参数的应用
  • 原文地址:https://blog.csdn.net/m0_63238256/article/details/127930142
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号