【Matlab-基于形态学的权重自适应去噪】

news2024/11/17 5:45:24

【Matlab-基于形态学的权重自适应去噪】

参考书籍:计算机视觉与深度学习实战:以MATLAB、Python为工具,
主编:刘衍琦, 詹福宇, 王德建
北京:电子工业出版社,2019

1 引言

数字图像的噪声主要产生于获取、传输图像的过程中。常见的噪声主要有高斯噪声和椒盐噪声。其中,高斯噪声主要是由摄像机传感器元器件内部产生的;椒盐噪声主要是由图像切割所产生的黑白相间的亮暗点噪声,“椒”表示黑色噪声,“盐”表示白色噪声图像去噪是指减少数字图像中噪声的过程,被广泛应用于图像处理领域的预处理过程。

数字图像去噪也可以分为空域图像去噪和频域图像去噪空域图像去噪常用的有均值滤波算法和中值滤波算法,主要是对图像像素做邻域的运算来达到去噪效果。频域图像去噪首先是对数字图像进行某种变换,将其从空域转换到频域,然后对频域中的变换系数进行处理,最后对图像进行反变换,将其从频域转换到空域来达到去噪效果。其中,对图像进行空域和频域相互转换的方法有很多,常用的有傅里叶变换、小波变换等

数学形态学以图像的形态特征为研究对象,通过设计一套独特的数字图像处理方法和理论来描述图像的基本特征和结构,通过引入集合的概念来描述图像中元素与元素、部分与部分的关系运算。因此,数学形态学的运算由基础的集合运算(并、交、补等)来定义,并且所有的图像矩阵都能被方便地转换为集合。随着集合理论研究的不断深入和实际应用的拓展,图像形态学处理也在图像分析、模式识别等领域起着重要的应用。

2 数学形态学原理

形态变换按应用场景可以分为二值变换和灰度变换两种形式。其中,二值变换一般用于处理集合,灰度变换一般用于处理函数。基本的形态变换包括腐蚀、膨胀、开运算和闭运算。 假设 f(x)和g(x)为被定义在二维离散空间F和G上的两个离散函数,其中f(x)为输入图像,g(x)为结构元素,则f(x)关于g(x)的腐蚀和膨胀分别被定义为:

( f Θ g ) ( x ) = min ⁡ y ∈ G [ f ( x + y ) − g ( y ) ] ( 1 ) ( f ⊕ g ) ( x ) = max ⁡ y ∈ G [ f ( x − y ) + g ( y ) ] ( 2 ) \begin{aligned} & (f \Theta g)(x)=\min _{y \in G}[f(x+y)-g(y)] \qquad(1) \\ & (f \oplus g)(x)=\max _{y \in G}[f(x-y)+g(y)] \qquad(2)\end{aligned} (fΘg)(x)=yGmin[f(x+y)g(y)](1)(fg)(x)=yGmax[f(xy)+g(y)](2)

f(x)关于g(x)的开运算和闭运算分别被定义为:

( f ∘ g ) ( x ) = [ ( f Θ g ) ⊕ g ] ( x ) ( 3 ) ( f ∙ g ) ( x ) = [ ( f ⊕ g ) Θ g ] ( x ) ( 4 ) \begin{aligned} & (f \circ g)(x)=[(f \Theta g) \oplus g](x) \qquad(3) \\ & (f \bullet g)(x)=[(f \oplus g) \Theta g](x) \qquad(4)\end{aligned} (fg)(x)=[(fΘg)g](x)(3)(fg)(x)=[(fg)Θg](x)(4)

脉冲噪声是一种常见的图像噪声,根据噪声的位置灰度值与其邻域的灰度值的比较可以分为正、负脉冲。其中,正脉冲噪声的位置灰度值要大于其邻域的灰度值,负脉冲则相反。从公式(2)、公式(3)可以看出,开运算先腐蚀后膨胀,可用于过滤图像中的正脉冲噪声;闭运算先膨胀后腐蚀,可用于过滤图像中的负脉冲噪声。因此,为了同时消除图像中的正负脉冲噪声,可采用形态开-闭的级联形式,构成形态开闭级联滤波器。形态开-闭(OC) 和形态闭-开 (CO) 级联滤波器分别被定义为:

O C ( f ( x ) ) = ( f ∘ g ∙ g ) ( x ) ( 4 ) CO ⁡ ( f ( x ) ) = ( f ∙ g ∘ g ) ( x ) ( 5 ) \begin{aligned} & \mathrm{OC}(f(x))=(f \circ g \bullet g)(x) \qquad(4) \\ & \operatorname{CO}(f(x))=(f \bullet g \circ g)(x)\qquad(5) \end{aligned} OC(f(x))=(fgg)(x)(4)CO(f(x))=(fgg)(x)(5)

根据集合运算与形态运算的特点,形态开-闭和形态闭-开级联滤波器具有平移不变性、递增性、对偶性和幂等性。

3 权重自适应的多结构形态学去噪

在数学形态学图像去噪的过程中,通过适当地选取结构元素的形状和维数可以提升滤波去噪的效果。在多结构元素的级联过程中,需要考虑到结构元素的形状和维数。假设结构元素集为Amn,n代表形状序列,m代表维数序列,则:

A n m = { A 11 , A 12 , ⋯   , A 1 m , A 21 , ⋯   , A n m } ( 6 ) \boldsymbol{A}_{n m}=\left\{A_{11}, A_{12}, \cdots, A_{1 m}, A_{21}, \cdots, A_{n m}\right\}\qquad(6) Anm={A11,A12,,A1m,A21,,Anm}(6)

A 11 ⊂ A 11 ⊂ ⋅ ⋅ ⋅ ⊂ A 1 m A 21 ⊂ A 21 ⊂ ⋅ ⋅ ⋅ ⊂ A 2 m ⋅ ⋅ ⋅ A n 1 ⊂ A n 1 ⊂ ⋅ ⋅ ⋅ ⊂ A n m ( 7 ) A_{11}\subset A_{11}\subset\cdot \cdot \cdot \subset A_{1m}\\A_{21}\subset A_{21}\subset\cdot \cdot \cdot \subset A_{2m} \\\cdot \cdot \cdot \\A_{n1}\subset A_{n1}\subset\cdot \cdot \cdot \subset A_{nm}\qquad(7) A11A11A1mA21A21A2mAn1An1Anm(7)

式中,A11包含于A12,因为A12继承了A11的信息并加入了腐蚀算子形成A12,依此类推.在这里插入图片描述
假设输入图像为f(x),经某种形状的结构元素的串形滤波结果为fi(x),i=1,2,…,n,则输出图像为 F(x)。其中,结构元素通过公式(8) 所示的自适应算法确定 α 1 , α 2 , ⋅ ⋅ ⋅ , α i \alpha_1,\alpha_2,\cdot \cdot \cdot ,\alpha_i α1,α2,,αi,则:

α i = β i β 1 + β 2 + ⋅ ⋅ ⋅ + β n ( 8 ) \alpha_i =\frac{\beta_i}{\beta_1+\beta_2+\cdot \cdot \cdot +\beta_n}\qquad(8) αi=β1+β2+⋅⋅⋅+βnβi(8)

F ( x ) = ∑ i = 1 n α i f i ( x ) ( 9 ) F(x)=\sum_{i=1}^{n} \alpha_i f_i (x)\qquad(9) F(x)=i=1nαifi(x)(9)

为了简化算法实验步骤,在具体实现过程中,可以选择将串联处理结果与原始图像进行差异值计算的方式来作为权值向量,再通过对串联结果加权求和的方式进行计算。因此,为了对数字图像进行数学形态学滤波器级联滤波去噪的仿真,本实验选择一幅人脸图像,加入泊松噪声,通过构建不同的串联滤波器、并联滤波器进行滤波去噪实验,最后通过计算并绘制PSNR 值曲线来显示去噪效果。

原图是一张人物灰度图:
在这里插入图片描述
文件结构如下:

.
└─  ErodeList.m
└─  GetRateList.m
└─  GetRemoveResult.m
└─  GetStrelList.m
└─  main.m
└─  PSNR.m
└─  images
       └─im.jpg

4 实现代码

4.1 主函数代码

main.m

clc; clear all; close all;
filename = fullfile(pwd, 'images/im.jpg');
Img = imread(filename);
if ndims(Img) == 3
    I = rgb2gray(Img);
else
    I = Img;
end
Ig = imnoise(I,'poisson');
s = GetStrelList();
e = ErodeList(Ig, s);
f = GetRateList(Ig, e);
Igo = GetRemoveResult(f, e);
figure;
subplot(1, 2, 1); imshow(I, []); title('原图像');
subplot(1, 2, 2); imshow(Ig, []); title('噪声图像');
figure;
subplot(2, 2, 1); imshow(e.eroded_co12, []); title('串联1处理结果');
subplot(2, 2, 2); imshow(e.eroded_co22, []); title('串联2处理结果');
subplot(2, 2, 3); imshow(e.eroded_co32, []); title('串联3处理结果');
subplot(2, 2, 4); imshow(e.eroded_co42, []); title('串联4处理结果');
figure;
subplot(1, 2, 1); imshow(Ig, []); title('噪声图像');
subplot(1, 2, 2); imshow(Igo, []); title('并联去噪图像');
psnr1 = PSNR(I, e.eroded_co12);
psnr2 = PSNR(I, e.eroded_co22);
psnr3 = PSNR(I, e.eroded_co32);
psnr4 = PSNR(I, e.eroded_co42);
psnr5 = PSNR(I, Igo);
psnr_list = [psnr1 psnr2 psnr3 psnr4 psnr5];
figure; 
plot(1:5, psnr_list, 'r+-');
axis([0 6 18 24]);
set(gca, 'XTick', 0:6, 'XTickLabel', {'', '串联1', '串联2', '串联3', ...
    '串联4', '并联', ''});
grid on;
title('PSNR曲线比较');

4.2 串、并联去噪

GetStrelList.m指定线性算子,返回结构体s,s输入去噪算子ErodeList.m中,返回去噪结构体e
GetStrelList.m

function s = GetStrelList()

s.co11 = strel('line',5,-45);
s.co12 = strel('line',7,-45);
s.co21 = strel('line',5,45);
s.co22 = strel('line',7,45);
s.co31 = strel('line',3,90);
s.co32 = strel('line',5,90);
s.co41 = strel('line',3,0);
s.co42 = strel('line',5,0);

ErodeList.m

function e = ErodeList(Ig, s)

e.eroded_co11 = imerode(Ig,s.co11);
e.eroded_co12 = imerode(e.eroded_co11,s.co12);
e.eroded_co21 = imerode(Ig,s.co21);
e.eroded_co22 = imerode(e.eroded_co21,s.co22);
e.eroded_co31 = imerode(Ig,s.co31);
e.eroded_co32 = imerode(e.eroded_co31,s.co32);
e.eroded_co41 = imerode(Ig,s.co41);
e.eroded_co42 = imerode(e.eroded_co41,s.co42);

4.3 图像权值计算

图像权值计算函数 GetRateList.m 将根据串联结果与原始图像的差异程度进行计算,图像并联去噪函数 GetRcmoveResult.m 将根据输入的权值向量、串联结果,通过加权求和的方式进行处理核心代码如下:
GetRateList.m

function f = GetRateList(Ig, e)

f.df1 = sum(sum(abs(double(e.eroded_co12)-double(Ig))));
f.df2 = sum(sum(abs(double(e.eroded_co22)-double(Ig))));
f.df3 = sum(sum(abs(double(e.eroded_co32)-double(Ig))));
f.df4 = sum(sum(abs(double(e.eroded_co42)-double(Ig))));
f.df = sum([f.df1 f.df2 f.df3 f.df4]);

GetRcmoveResult.m ,这里的权重计算方法是求差值,再求和,再除去中总的差值,即表示每部分差值占总差值的比例

function Igo = GetRemoveResult(f, e)

Igo = f.df1/f.df*double(e.eroded_co12)+f.df2/f.df*double(e.eroded_co22)+...
    f.df3/f.df*double(e.eroded_co32)+f.df4/f.df*double(e.eroded_co42);
Igo = mat2gray(Igo);

4.4 计算 PSNR 值

PSNR全称为“Peak Signal-to-Noise Ratio”,中文意思即为峰值信噪比,是衡量图像质量的指标之一。PSNR参考链接

PSNR值越大,表示图像的质量越好,一般来说:
(1)高于40dB:说明图像质量极好(即非常接近原始图像)
(2)30—40dB:通常表示图像质量是好的(即失真可以察觉但可以接受)
(3)20—30dB:说明图像质量差
(4)低于20dB:图像质量不可接受

为了对处理结果进行比较,这里采用计算 PSNR 值的方式将串联、并联处理结果与原始图像进行计算,并绘制 PSNR 值曲线进行分析。核心代码如下:

function S = PSNR(s,t)

[m, n, ~]=size(s);
s = im2uint8(mat2gray(s));
t = im2uint8(mat2gray(t));
s = double(s);
t = double(t);
sd = 0;
mi = m*n*max(max(s.^2));
for u = 1:m
    for v = 1:n
        sd = sd+(s(u,v)-t(u,v))^2;
    end
end
if sd == 0
    sd = 1;
end
S = mi/sd;
S = 10*log10(S);

5 实验结果

图1 原图和噪声图像
在这里插入图片描述
图2 串联去噪图像
在这里插入图片描述
图3 并联去噪图像
在这里插入图片描述
原图
在这里插入图片描述

图4 PSNR值曲线
在这里插入图片描述
结论:实验结果表明,如果仅通过串联滤波器去噪,则往往具有一定的局限性,在结果图像中也保留着较为明显的噪声。通过并联滤波器进行滤波去噪得到的结果中 PSNR 值更高,而且结图像在视觉效果上要比只进行串联滤波器去噪更为理想。

将形态学滤波器通过串、并联来构建级联滤波器的方式应用于不同的图像处理过程中,在一定程度上能够影响普通滤波的效果,这也是一个研究方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1130144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

仿真软件Proteus8.10 SP3 pro一键安装、汉化教程(附proteus8.10下载链接安装视频)

本破解教程仅供个人及 proteus 8.10粉丝们交流学习之用,请勿用于商业用途, 谢谢支持。此版本为Proteus8.10 SP3 pro 这里写目录标题 安装包下载链接:视频教程 一、安装软件解压二、软件安装三、汉化 安装包下载链接: http://www.eemcu.cn/2022/05/14/pr…

【COMP305 LEC 8】

LEC 8 Comp305 Part I. Artificial Neural Networks Topic 3. Hebb’s Rules 1. Hebb’s Rules and the historical background The McColloch-Pitts neuron made a base for a machine (network of units) capable of 1. storing information and 2. producing logical…

2.2.3 三层交换机实现VLAN之间的通信

实验2.2.3 三层交换机实现VLAN之间的通信 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.划分SW2A的VLAN,并分配接口。2.划分SW3A的VLAN,配置每个VLAN接口的IP地址。3.设计计算机的网关,实现不同VLAN之间和不同网络之间的通…

零售数据分析模板分享(通用型)

零售数据来源多,数据量大,导致数据的清洗整理工作量大,由于零售的特殊性,其指标计算组合更是多变,进一步导致了零售数据分析工作量激增,往往很难及时分析数据,发现问题。那怎么办?可…

什么是大数据平台?

大数据平台是一套综合性的软件工具和技术,旨在帮助组织收集、存储、管理、分析和可视化大量复杂的数据。这些平台通常提供一系列的服务和功能,使得用户能够更容易地处理和分析大数据,从而获得有价值的洞察和知识。 以下是大数据平台通常包括的…

【力扣刷题】解码方法

【力扣刷题】解码方法😎 前言🙌91. 解码方法解题思路:解题源码分享: 运行结果截图: 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧&#…

RocketMQ如何保证消息被有序消费

RocketMQ如何保证消息被有序消费 消费者端如何接收有序消息 队列消费的两种模式 并发消费模式 当同一类消息被送入不同队列,且这些消息在处理上并不需要按时序消费时,可以考虑使用并发消费模式。 并发消费模式生产者会将消息轮询发送到不同的队列当…

OpenCV官方教程中文版 —— 直方图的计算,绘制与分析

OpenCV官方教程中文版 —— 直方图的计算,绘制与分析 前言一、原理1.统计直方图2. 绘制直方图3. 使用掩模 前言 • 使用 OpenCV 或 Numpy 函数计算直方图 • 使用 Opencv 或者 Matplotlib 函数绘制直方图 • 将要学习的函数有:cv2.calcHist()&#xf…

[100天算法】-不同路径(day 37)

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如…

MATLAB | 两种上色方式的旭日图绘制

嘿,这次真的是好久不见了,好不容易才有点空写点文章,这段时间忙到后台回复都有点来不及看,很抱歉有一部分后台留言刚看到就已经超过时限没法回复了,不过根据大家的留言,需求主要集中在希望出一期旭日图的教…

12、Python -- if 分支 的讲解和使用

目录 程序结构顺序结构分支结构分支结构注意点不要忘记冒号 if条件的类型if条件的逻辑错误if表达式pass语句 程序流程 分支结构 分支结构的注意点 if条件的类型 if语句的逻辑错误 if表达式 程序结构 Python同样提供了现代编程语言都支持的三种流程 顺序结构 分支结构 循环结构…

CPU核检测

import psutil num_cpus psutil.cpu_count(logicalFalse) print(num_cpus) num_cpus psutil.cpu_count(logicalTrue) print(num_cpus)结果如下 可以看到这个结果是不同的

fiddler导出录制脚本并导出jmter脚本文件

1、fiddler导出录制脚本 可以通过save保存录制的脚本: 也可以选中这些链接,点击右键-->save-->select sessions -->选择要导入的文件 2、导入录制的脚本 再fiddler-->file--->load ARCHIVERS--->选择刚导出的.saz文件,正…

01-初识VUE3

01.初识VUE3 1.创建VUE3项目 1).使用 vue-cli 创建 ## 查看vue/cli版本,确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run serve2).使用 vite 创建 ## 创…

吃豆人C语言开发—Day2 需求分析 流程图 原型图

目录 需求分析 流程图 原型图 主菜单: 设置界面: 地图选择: 游戏界面: 收集完成提示: 游戏胜利界面: 游戏失败界面 死亡提示: 这个项目是我和朋友们一起开发的,在此声明一下…

【C#】委托与事件

目录 一、委托 1.什么是委托 2.委托类型的声明与初始化 3.委托类型引用方法的调用 4.使用委托类型作为方法的参数 5.Action委托 6.Func委托 7.通用类型冒泡排序 8.多播委托 二、Lambda表达式 1.匿名方法 2.Lambda表达式表示匿名方法 三、事件 1.什么是事件 2.事件…

Django viewsets 视图集与 router 路由实现评论接口开发

正常来说遵循restful风格编写接口,定义一个类包含了 get post delete put 四种请求方式,这四种请求方式是不能重复的 例如:获取单条记录和多条记录使用的方式都是get,如果两个都要实现的话那么得定义两个类,因为在同一个类中不能有…

【vue3 】 创建项目vscode 提示无法找到模块

使用命令创建 vue3 创建新应用 npm create vuelatest会看到一些可选功能的询问? √ 请输入项目名称: … vue-project √ 是否使用 TypeScript 语法? … 否 / 是 √ 是否启用 JSX 支持? … 否 / 是 √ 是否引入 Vue Router 进行单…

useReducer的使用以及与useState、useImmerReducer的对比使用

前言 对于拥有许多状态更新逻辑的组件来说,过于分散的事件处理程序可能会影响代码的可读性。这种情况,可以将组件的所有状态更新逻辑整合到一个外部函数中,这个函数就是reducer。 使用 useReducer(reducer, initialArg, init?) 参数 redu…

电力通信与泛在电力物联网技术的应用与发展-安科瑞黄安南

摘要:随着我国社会经济的快速发展,我国科技实力得到了非常大的提升,当前互联网通信技术在社会中得到了广泛的应用。随着电力通信技术的快速发展与更新,泛在电力物联网建设成为电力通讯发展的重要方向。本文已泛在电力物联网系统为…