前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Prewitt算子的图像边缘检测

基于Prewitt算子的图像边缘检测

作者头像
裴来凡
发布2022-05-29 10:15:14
6540
发布2022-05-29 10:15:14
举报
文章被收录于专栏:图像处理与模式识别研究所
代码语言:javascript
复制
import numpy as np
#用于处理图像矩阵、算子矩阵及相关运算
from PIL import Image
#图像处理模块
import matplotlib.pyplot as plt
import matplotlib.cm as cm
'''
定义函数img_conv (image_array,operator)用于图像卷积计算
其中,参数image_array为原图的灰度图像矩阵,operator为算子
返回结果为原图的灰度图像与算子卷积后的结果矩阵
实际上,SciPy库中的signal模块含有一个二维卷积函数convolve2d()
'''
def img_conv (image_array,operator):
    # 原图像矩阵的深拷贝
    image=image_array.copy()
    dim1,dim2=image.shape
    # 将矩阵中的每个元素与算子矩阵中的对应元素相乘再求和(忽略最外圈边框像素)
    for i in range(1,dim1-1):
        for j in range(1,dim2-1):
            image[i,j]=(image_array[(i-1):(i+2),(j-1):(j+2)]*operator).sum()
            # 由于卷积后各元素的值不一定为0~255,需归一化为0~255
            image=image*(255.0/image.max())
            #返回结果矩阵
    return image
#定义x方向的Prewitt算子
operator_x=np.array([[-1,0,1],[-1,0,1],[-1,0,1]])
#定义y方向的Prewitt算子
operator_y=np.array([[-1,-1,-1],[0,0,0],[1,1,1]])
#打开原图并将其转化成灰度图像
image=Image.open("C:/Users/xpp/Desktop/Lena.png").convert("L")
# 转化成图像矩阵
image_array=np.array(image)
# 得到x方向导数矩阵
image_x=img_conv(image_array,operator_x)
# 得到y方向导数矩阵
image_y=img_conv(image_array,operator_y)
# 得到梯度矩阵
image_xy=np.sqrt(image_x**2+image_y**2)
# 将梯度矩阵各元素的值归一化为0~255
image_xy=(255.0/image_xy.max())*image_xy
'''
输出图像边缘检测结果。
其中,参数为image_array时输出为原图的灰度图像,
参数为image_x时输出为原图的x方向导数图像,
参数为image_y时输出为原图的y方向导数图像,
参数为image_xy时输出为原图的梯度图像
'''
plt.subplot(2,2,1)
plt.imshow(image_array,cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(2,2,2)
plt.imshow(image_x,cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(2,2,3)
plt.imshow(image_y,cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(2,2,4)
plt.imshow(image_xy,cmap=plt.cm.gray)
plt.axis("off")
plt.show()

算法:基于Prewitt算子的图像边缘检测是利用两个方向模板与图像进行邻域卷积(Adjacent Convolution)运算来完成图像边缘检测。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档