Python彩色图像卷积特征提取——边缘提取

一、边缘提取

   图像提取边缘是基于像素梯度方法实现的,原理是把图像的灰度看成二维曲面,边缘是曲面的突出部分,利用梯度找到变化最的突变点。要想得到一幅图像的梯度,则要在图像的每个像素点位置进行计算偏导数,公式如下:

92dacbbe7ba440db99734cedcc644068.png

     93728c6d4c994d9ea2ca9f358de04af3.png

 对应的差分公式:

f1ac6c9388d544928ebd886134492fbc.png

 当已知离散数据点Z(xi,yi),i=1,2,3,...n时,对应的差分为公式:

a1ac9a139f2e4f3f85a3d7c380975e15.png

 通过计算上述两个差分的模,即可得到点(xi,yi)处的幅值,从而得到当图像像素矩阵为im,则点(i, j)处的特征计算公式可以简化为:

5ef8178f2a26416180dda6d0a5c24000.png

 二、常见的算子

(1)一阶导数的边缘算子

通过模板作为核与图像的每个像素点做卷积和运算,然后选取合适的阈值来提取图像的边缘。常见的有Roberts算子、Sobel算子和Prewitt算子。

(2)二阶导数的边缘算子

依据于二阶导数过零点,常见的有Laplacian 算子,此类算子对噪声敏感。

三、python代码实现

1.单通道图像特征提取

#img1为单通道图像像素矩阵

#返回图像的特征

def SingChannelGradientFun(img):
    [m,n]=img1.shape
    eim=np.zeros([m,n])
    for i in range(m-1):
        for j in range(n-1):
                 eim[i,j]=abs(img[i,j+1]-img[i,j])+abs(img[i+1,j]-img[i,j])
    return eim

2.灰度图像或彩色图像的特征提取

def  GradientEdgeFun(img):
    h=img.shape[0]
    w=img.shape[1]
    imShape=img.shape
    dim=len(imShape)
    if dim==2:#灰度图像的特征提取
        eim=SingChannelGradientFun(img)
    else:     #彩色图像的特征提取
        imR=img[:,:,0]
        imG=img[:,:,1]
        imB=img[:,:,2]
        eim=np.zeros((h,w,3))#利用矩阵进行填充
        eimr=SingChannelGradientFun(imR)
        eimg=SingChannelGradientFun(imG)
        eimb=SingChannelGradientFun(imB)
        eim[:,:,0]=eimr
        eim[:,:,1]=eimg
        eim[:,:,2]=eimb
    return eim

3.text

1.灰度图

import matplotlib.pyplot as plt
import cv2
import numpy as np
img1=cv2.imread('lena.bmp',0)
eim1=GradientEdgeFun(img1).astype(np.uint8)
cv2.imshow('img1',img1)
cv2.imshow('eim1',eim1)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如图所示:

caf2ff06d59a434582c2eba1548837d3.pngec679bc736ec4dcd87b5614ab0b9a6b8.png

 2.彩色图

import matplotlib.pyplot as plt
import cv2
import numpy as np
img2=cv2.imread('peppers.JPG')
new_img2=cv2.cvtColor(img2,cv2.COLOR_BGR2RGB)#opencv读入的图像是BGR的我们进行转换
eim2=GradientEdgeFun(new_img2).astype(np.uint8)
new_eim2=cv2.cvtColor(eim2,cv2.COLOR_RGB2BGR)
plt.imshow(new_img2)
plt.show()
plt.imshow(eim2)
plt.show()

 结果如图所示:

776bc0fa6d9043f3b8290f014e58814a.png86c8f6761ab24b10af4a0abf1e92a6a6.png

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值