图像边缘检测之Prewitt算子

article/2025/11/9 6:33:46

Prewitt 算子

1. 原理

Prewitt算子是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。由于Prewitt算子采用 3x3 模板对区域内的像素值进行计算,而Robert算子的模板为 2x2,故Prewitt算子的边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。Prewitt算子适合用来识别噪声较多、灰度渐变的图像,其计算公式如下所示:
在这里插入图片描述
例如,下面给出Prewitt算子的模板,在像素点P5处 x 和 y 方向上的梯度大小 g_x 和 g_y 分别计算为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. pytohn代码

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img = cv2.imread('C:/Users/123/Pictures/66.png')
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 灰度化处理图像
grayImage = 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']# 显示图形
plt.subplot(121),plt.imshow(img_RGB),plt.title('原始图像'), plt.axis('off') #坐标轴关闭
plt.subplot(122),plt.imshow(Prewitt, cmap=plt.cm.gray ),plt.title('Prewitt算子'), plt.axis('off')
plt.show()

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

3. matlab代码

I =imread('C:/Users/123/Pictures/66.png');
I0=rgb2gray(I);
BW1 =edge(I0,'prewitt');
subplot(121),imshow(I0);title('原始图像');
subplot(122),imshow(BW1);title('prewitt算子');

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


http://chatgpt.dhexx.cn/article/9eDtaBJi.shtml

相关文章

华为--配置本地环回接口地址

该实验紧接上一节实验 网络拓扑图如下 AR1环回接口配置 AR2环回接口配置 AR3环回接口配置 配置AR1回环接口路由 配置AR2回环接口路由 配置AR3回环接口路由 在AR1上测试回环接口的连通性 在AR2上测试回环接口的连通性 在AR3上测试回环接口的连通性 测试成功 转载于:https://my.o…

【LINUX】ifconfig只有本地环回地址问题的解决方法

问题描述: ifconfig只有lo,没有看到ens33 ifconfig -a看到了ens33,但是没有地址 解决方法: (1)stop network-manager sudo service network-manager stop (2)删除旧有的网络配置…

怎么判断一个ipv4地址是 私有地址,环回地址,实验地址,TEST-NET地址,本地链路地址?

问题的提出: 理论讲解(黄色的为上题的答案): IP地址分为五类: A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳…

回环地址 127.0.0.1

控制台输入ping 127.0.0.1。 $ ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq0 ttl64 time0.080 ms 64 bytes from 127.0.0.1: icmp_seq1 ttl64 time0.093 ms 64 bytes from 127.0.0.1: icmp_seq2 ttl64 time0.074 ms 64 byte…

环回接口 环回地址 环回路由

网络协议的数据链路层的一些重点我们来讲解一下。这此我们主要讲解的是环回接口的问题。环回接口(loopback):路由器上的一个逻辑、虚拟接口.路由器默认没有任何环回接口.此接口允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信.一般系统…

什么是环回接口(Loopback Interface、环回地址)

2.7 环回接口 大多数的产品都支持环回接口(Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。 A类网络号 127就是为环回接口预留的。根据惯例,大多数系统把 IP地址127.0.0.1分配给这个接…

特殊IP地址——环回地址

环回地址(Loopback Address)127.0.0.1---127.255.255.254 是一种特殊的 IP 地址,它允许计算机的软件组件在本地主机上进行网络通信,也称作本地回环地址。 在计算机网络中,环回地址是一个虚拟地址,它不属于任…

“谁告诉你环回地址就是127.0.0.1?” “老师就是这么说的。”

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」:此文章已录入专栏《计算机网络零基础快速入门》 环回地址是本地的「虚拟接口」,默认不会宕掉。 我们经…

带头结点单链表、不带头结点单链表(头指针单链表)

1、头结点和头指针的区别 1.1区别: 头指针表明了链表的结点,可以唯一确定一个单链表。 头指针指向链表的第一个结点,其记录第一个存储数据的结点的地址。 头结点是点链表的第一个结点,若单链表有头结点,则头指针指向头…

不带头结点的单链表------C语言实现

1 /****************************************************/ 3 File name:no_head_link.c4 Author:SimonKly Version:0.1 Date: 2017.5.205 Description:不带头节点的单链表6 Funcion List: 7 ***************************************…

单链表的头结点的作用

问题:在单链表中使用“头结点”,这个哑结点始终是链表的第一个元素,这个技巧的利与弊? 链表中第一个结点的存储位置叫做头指针,那么整个链表的存取就必须从头指针开始进行了。之后的每一个结点,其实就是上…

【数据结构】单链表之带头结点的单链表

一、单链表相关知识点介绍: 1. 结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址的部分称为指针域。 2. 头结点:引入头结点的目的是,将链表首元结点的插入和删除操作…

【链表】带头节点和不带头节点单链表的区别

目录 🍔当链表的结点只包含一个指针域时,叫做单链表 🍔不论带不带头节点,所有的链表都要有个头指针! 🍟带头结点的链表的头指针指向的是头结点,头结点的指针域指向首元结点 🍟不带…

带头结点的单链表的操作(C语言)

初始化 先了解头结点 头结点是一个特殊的结点,它的数据域不存储信息,通常情况下,头指针指向的结点为头结点,由于头结点不存储信息,所以不是数据结构中的实际结点,第一个实际结点其实是head->next指示的…

单链表(不带头结点)

单链表不带头结点结构体设计: //不带头结点的结构体设计: typedef int ELEM_TYPE;//有效数据节点结构体设计 typedef struct Node {ELEM_TYPE data;//数据域 (1.头结点:不保存任何数据 2.有效数据节点:保存有效值…

数据结构之不带头结点的单链表

我们都知道不管是单链表、双向链表还是循环链表,都带有头结点,这个头结点相当于一个起始的位置。我们在设计带头结点的单链表的时候,我们会在主函数中设计一个头结点,并把它的指针域置为空,这样我们就可以进行增删查改…

数据结构--带头结点的单链表

单链表分为:带头结点和不带头结点,不带头结点的单链表需要用到二级指针,容易出错。 1、结构体设计 typedef int ELEM_TYPE; //有效数据节点结构体设计(头结点借用) typedef struct Node {ELEM_TYPE data;//数据域 &…

带头结点的单链表的总结

线性表的链式存储是用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻。 带头结点的单链表是指,在单链表的第一个结点之前增加一个特殊的结点,称为头结点。 头结点的作用:使所有链表(…

单链表的创建(带头结点和不带头结点)

伪代码: 创建结点 创建头结点(单独定义一个结构体来保存单链表的首地址和尾地址还有链表的长度) 创建带头结点的单链表 注意:创建头结点中的首尾指针都要指空,长度等于0; 从终端接收数据 创建结点保存数据: 创建的节点…

单链表———带头结点跟不带头结点的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、单链表:带头结点跟不带头结点二、使用步骤总结 前言 数据结构中单链表的创建 带头结点跟不带头结点的区别 一、单链表:带头结点跟…