• 图像运算和图像增强九


    图像运算和图像增强九

    图像锐化之 Roberts、Prewitt 算子实现边缘检测

    (1)图像锐化

    图像锐化的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是图像受到了平均或积分运算,因此可以对其进行逆运算,从而使图像变得清晰。图像锐化和边缘提取技术可以消除图像中的噪声,提取图像信息中用来表征图像的一些变量,为图像识别提供基础。
    (2)Roberts算子
    Roberts 算子又称为交叉微分算法,它是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条。
    dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

    • dst 表示输出的边缘图,其大小和通道数与输入图像相同
    • ddepth 表示目标图像所需的深度
    • kernel 表示卷积核,一个单通道浮点型矩阵
    • anchor 表示内核的基准点,其默认值为(-1,-1),位于中心位置
    • delta 表示在储存目标图像前可选的添加到像素的值,默认值为 0
    • borderType 表示边框模式
      dst = convertScaleAbs(src[, dst[, alpha[, beta]]])
    • src 表示原数组
    • dst 表示输出数组,深度为 8 位
    • alpha 表示比例因子
    • beta 表示原数组元素按比例缩放后添加的值
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    #读取图像
    img=cv2.imread('luo.png')
    lenna_img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    #灰度化处理图像
    grayimage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #Roberts算子
    kernelx=np.array([[-1,0],[0,1]],dtype=int)
    kernely=np.array([[0,-1],[1,0]],dtype=int)
    x=cv2.filter2D(grayimage,cv2.CV_16S,kernelx)
    y=cv2.filter2D(grayimage,cv2.CV_16s,kernely)
    #转uint8
    absX=cv2.convertScaleAbs(x)
    absY = cv2.convertScaleAbs(y) 
    Roberts = cv2.addWeighted(absX,0.5,absY,0.5,0)
    #用来正常显示中文标签
    plt.rcParams['font.sans-serif']=['SimHei']
    #显示图形
    titles=['原始图像’,‘Roberts算子’]
    images=[lenna_img,Roberts]
    for i in range(2):
    	plt.subplot(1,2,i+1),plt.imshow(image[i],'gray')
    	plt.title(title[i])
    	plt.xticks([]),plt.yticks([])
    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

    在这里插入图片描述
    (3)Prewitt算子
    Prewitt 是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    #读取图像
    img=cv2.imread('luo.png')
    lenna_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #Prewitt算子
    kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]],dtype=int)
    kernely = np.array([[-1,0,1],[-1,0,1],[-1,0,1]],dtype=int)
    x = cv2.filter2D(grayImage, cv2.CV_16S, kernelx)
    y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)
    #转 uint8
    absX = cv2.convertScaleAbs(x)
    absY=cv2.convertScaleAbs(y)
    Prewitt=cv2.addWeighted(absX,0.5,absY,0.5,0)
    #用来正常显示中文标签
    plt.rcParams['font.sans-serif']=['SimHei']
    #显示图形
    titles = ['原始图像', 'Prewitt 算子'] 
    images = [lenna_img, Prewitt] 
    for i in range(2):
    	plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
    	plt.title(titles[i])
    	plt.xticks([]),plt.yticks([])
    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

    在这里插入图片描述

  • 相关阅读:
    14【react-Hook (上)】
    TCP协议相关特性
    高级架构师_Docker_第2章_ Docker核心原理_ 第2节_Docker网络
    时序数据库介绍及应用场景,C#实例
    Spring boot 集成 xxl-job
    常见的反爬手段和解决思路(爬虫与反爬虫)
    从程序员的角度看人类通信史
    Github每日精选(第24期):python的浏览器MechanicalSoup
    Python两个序列的相关性
    java8 (jdk 1.8) 新特性——Lambda
  • 原文地址:https://blog.csdn.net/come_closer/article/details/127886890