Prewitt算子

本文介绍了Prewitt算子的原理与应用,这是一种用于数字图像处理中边缘检测的一阶微分算子。通过计算像素点上下、左右邻点的灰度差,在边缘处达到极值从而检测边缘。此外,还提供了Prewitt算子的MATLAB实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到
极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图
像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。

[1]

对数字图像f(x,y),Prewitt算子的定义如下:
G(i)=|[f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)]-[f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)]|
G(j)=|[f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)]-[f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)]|
则 P(i,j)=max[G(i),G(j)]或 P(i,j)=G(i)+G(j)
经典Prewitt算子认为:凡灰度新值大于或等于阈值的像素点都是边缘点。即选择适当的阈值T,若P(i,j)≥T,则(i,j)为边缘点,P(i,j)为边缘图像。这种判定是欠合理的,会造成边缘点的误判,因为许多噪声点的灰度值也很大,而且对于幅值较小的边缘点,其边缘反而丢失了。
Prewitt算子程序:

clc
clear all
close all
A = imread('tig.jpg');  %读入图像
imshow(A);title('原图');
y_mask = [-1 -1 -1;0 0 0;1 1 1];  %建立Y方向的模板
x_mask = y_mask';  %建立X方向的模板
I = im2double(A);   %将图像数据转化为双精度
dx = imfilter(I, x_mask);  %计算X方向的梯度分量
dy = imfilter(I, y_mask);  %计算Y方向的梯度分量
grad = sqrt(dx.*dx + dy.*dy);  %计算梯度
grad = mat2gray(grad);   %将梯度矩阵转换为灰度图像
level = graythresh(grad);  %计算灰度阈值
BW = im2bw(grad,level);  %用阈值分割梯度图像
figure, imshow(BW);  %显示分割后的图像即边缘图像
title('Prewitt')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值