【实验报告】实验三、图像复原

news2025/6/17 15:17:20

1.  实验目的

(1) 理解退化模型。

(2) 掌握常用的图像复原方法。

2.  实验内

(1) 模拟噪声的行为和影响的能力是图像复原的核心。

(2) 空域滤

 实验一

1. 1 生至少 2 种不同类型的噪声,并绘制原图像、加噪后图像及对应直方图于 图形窗口中[subplot(m,n,p)]

1.2 有椒盐噪声图像进行 5×5 方形窗口中值滤波。

附加内容: 自编程实现均值、中值、 自适应中值滤波器

1.1

>> f = imread('D:\ALLDOWNLOAD\实验三\实验三\lena.bmp');%读取图片到工作区

%MTALAB默认显示的图像f的原始图像

subplot(4,2,1),imshow(f),title('原始图像');

%MTALAB默认显示的图像f的直方图

subplot(4,2,2),imhist(f),title('原始图像直方图');

a=2;%均匀噪声

b=5;

noise= a + (b - a) * rand(100, 100) ;

blackIm=zeros( 100, 100);

noisedIm=noise + blackIm;

subplot(4,2,3);imshow(noisedIm,[]);title('加均匀噪声noisedIm后图像');

subplot(4,2,4 );histogram(noisedIm);title('均匀噪声noisedIm的直方图');

j = imnoise(f,'salt & pepper');%椒盐噪声

subplot(4,2,5);imshow(j,[]);title('加椒盐噪声后图像');

subplot(4,2,6 );histogram(j);title('加椒盐噪声后的直方图');

g=imnoise(f,'gaussian',0,1); %高斯噪声

subplot(4,2,7);imshow(g,[]);title('加高斯噪声后图像');

subplot(4,2,8 );histogram(g);title('加高斯噪声后的直方图');

1.2

f=imread('D:\ALLDOWNLOAD\实验三\实验三\house.bmp');

[m,n]=size(f);

subplot(4,2,1),imshow(f),title('原始图像');

j = imnoise(f,'salt & pepper',0.1);%椒盐噪声

subplot(4,2,2);imshow(j,[]);title('加椒盐噪声后图像');

w = ones(5)/(5*5); %建立一个5×5大小的均值滤波器

g1 = imfilter(j, w); %相关运算,默认边界充零

subplot(4,2,3),imshow(g1),title('加均值滤波器后图像');

g2=medfilt2(j,[5 5]);%建立大小为5x5的邻域大小的中值滤波器

subplot(4,2,4),imshow(g2),title('加中值滤波器后图像');

Smax=5;%确定最大滤波半径

u=zeros(m+2*Smax+1,n+2*Smax+1);

u(Smax+1:m+Smax,Smax+1:n+Smax)=j;

u(1:Smax,Smax+1:n+Smax)=u(1:Smax,1:n); %扩展上边界

u(1:m+Smax,n+Smax+1:n+2*Smax+1)=u(1:m+Smax,n:n+Smax); %扩展右边界

u(m+Smax+1:m+2*Smax+1,Smax+1:n+2*Smax+1)=u(m:m+Smax,Smax+1:n+2*Smax+1); %扩展下边界

u(1:m+2*Smax+1,1:Smax)=u(1:m+2*Smax+1,Smax+1:2*Smax); %扩展左边界

g3=u;

for i=Smax+1:m+Smax

for j=Smax+1:n+Smax

r=1; %初始滤波半径

while r~=Smax

W=u(i-r:i+r,j-r:j+r);

W=sort(W);

Zmin=min(W(:));

Zmax=max(W(:));

Zmed=W(uint8((2*r+1)^2/2));

if Zmin<Zmed && Zmed<Zmax %如果当前邻域中值不是噪声点,那么就用此次的邻域

break;

else

r=r+1; %否则扩大窗口,继续判断

end 

end

if Zmin<u(i,j) && u(i,j)<Zmax %如果当前这个像素不是噪声,原值输出

g3(i,j)=u(i,j);

else %否则输出邻域中值

g3(i,j)=Zmed;

end

end

end

subplot(4,2,5);imshow(g3(Smax+1:m+Smax,Smax+1:n+Smax),[]);title('加入自适应中值滤波后图像');

实验二

2.2  选择一幅清晰的灰度图像,对该图像进行模糊化处理并加入不同强度的高斯 噪声,然后分别采用逆滤波、维纳滤波和约束最小二乘方滤波对退化图像进行 比较各种图像复原方法的复原效果。

加内容: 自编程实现不同截至频率的逆滤波并比较其复原效果。

  1. 逆滤波高斯噪声

%%读入图片

I = im2double(imread('D:\ALLDOWNLOAD\实验三\实验三\house.bmp'));% [0,1]

[M,~] = size(I);

figure;

subplot(2,3,1), imshow(I);

title('原始图像');

%模拟运动模糊H(u,v)

T=1;a=0.02;b=0.02;

v=[-M/2:M/2-1];u=v';

A=repmat(a.*u,1,M)+repmat(b.*v,M,1);

H=T/pi./A.*sin(pi.*A).*exp(-1i*pi.*A);

H(A==0)=T;% replace NAN

%得到模糊图像

F=fftshift(fft2(I));

FBlurred=F.*H;

%显示模糊图像

IBlurred =real(ifft2(ifftshift(FBlurred)));

subplot(2,3,2), imshow(uint8(255.*mat2gray(IBlurred)));

title('运动模糊图像');

%% 无噪声情况下的复原

FDeblurred=FBlurred./H;

IDeblurred=real(ifft2(ifftshift(FDeblurred)));

subplot(2,3,4), imshow(uint8(255.*mat2gray(IDeblurred)));

title('无噪情况下直接逆滤波');

%% Simulate Noise Model

noise_mean = 0;

noise_var = 1e-3;

noise=imnoise(zeros(M),'gaussian', noise_mean,noise_var);

FNoise=fftshift(fft2(noise));

%得到加噪的运动模糊图像

FBlurred_Noised=FNoise+FBlurred;

IBlurred_Noised=real(ifft2(ifftshift(FBlurred_Noised)));

subplot(2,3,3), imshow(uint8(255.*mat2gray(IBlurred_Noised)));

title('加噪运动模糊图像');

%直接逆滤波

FDeblurred2=FBlurred_Noised./H;

FH1=abs(FDeblurred2);

IDeblurred2=real(ifft2(ifftshift(FDeblurred2)));

subplot(2,3,5), imshow(uint8(255.*mat2gray(IDeblurred2)));

title ('有噪情况下直接逆滤波');

%设置截至半径为Radius的复原

Radius=33;

FDeblurred2=zeros(M);

for a=1:M

for b=1:M

if sqrt((a-M/2).^2+(b-M/2).^2)<Radius

FDeblurred2(a,b)= FBlurred_Noised(a,b)./H(a,b);

end

end

end

FH2=abs(FDeblurred2);

IDeblurred2=real(ifft2(ifftshift(FDeblurred2)));

subplot(2,3,6), imshow(uint8(255.*mat2gray(IDeblurred2)));

title(['加噪运动模糊图像半径为', num2str(Radius),'的圆内逆滤波复原']);

2.维纳滤波

%读取图片到工作区

I = im2double(imread('D:\ALLDOWNLOAD\实验三\实验三\house.bmp'));

subplot(3,2,1);imshow(I);title('Original Image (courtesy of MIT)');%原始图像

%模拟一个运动模糊,仿真相机移动信号

LEN = 21;

THETA = 11;

PSF = fspecial('motion', LEN, THETA);

blurred = imfilter(I, PSF, 'conv', 'circular');

subplot(3,2,2);imshow(blurred);title('Blurred Image')%运动模糊图像

%仿真噪声,假定噪声为 0 ,恢复图像

noise_mean = 0;

noise_var = 0.0001;

blurred_noisy = imnoise(blurred, 'gaussian', noise_mean, noise_var);

subplot(3,2,3);imshow(blurred_noisy);title('Simulate Blur and Noise')%仿真噪声图像

%无噪声假设的条件下重构图像,使用最佳噪声/信号功率比恢复图像

estimated_nsr = 0;

wnr2 = deconvwnr(blurred_noisy, PSF, estimated_nsr);

subplot(3,2,4);imshow(wnr2);title('Restoration of Blurred, Noisy Image Using NSR = 0')%无噪声重构图像

%进行合理的噪声假设重构图像

estimated_nsr = noise_var / var(I(:));

wnr3 = deconvwnr(blurred_noisy, PSF, estimated_nsr);

subplot(3,2,5);imshow(wnr3);title('Restoration of Blurred, Noisy Image Using Estimated NSR');%合理噪声假设重构图像

3.约束最小二乘方滤波

% 读取图片到工作区

I = im2double(imread('D:\ALLDOWNLOAD\实验三\实验三\house.bmp'));

[hei,wid,~] = size(I);

subplot(2,3,1),imshow(I);

title('Original Image (courtesy of MIT)');

% 模拟一个运动模糊

LEN = 21;

THETA = 11;

PSF = fspecial('motion', LEN, THETA);

blurred = imfilter(I, PSF, 'conv', 'circular');

subplot(2,3,2), imshow(blurred); title('Blurred Image');

% 反滤波器百分比

If = fft2(blurred);

Pf = psf2otf(PSF,[hei,wid]);

deblurred = ifft2(If./Pf);

subplot(2,3,3), imshow(deblurred); title('Restore Image')

% 模拟加性噪声的百分比

noise_mean = 0;

noise_var = 0.00001;

blurred_noisy = imnoise(blurred, 'gaussian', ...

noise_mean, noise_var);

subplot(2,3,4), imshow(blurred_noisy);title('Simulate Blur and Noise')

%尝试使用自制的约束最小二乘过滤器进行恢复

p = [0 -1 0;-1 4 -1;0 -1 0];

P = psf2otf(p,[hei,wid]);

gama = 0.001;

If = fft2(blurred_noisy);

numerator = conj(Pf);

denominator = Pf.^2 + gama*(P.^2);

deblurred2 = ifft2( numerator.*If./ denominator );

subplot(2,3,5), imshow(deblurred2);

title('Restoration of Blurred Using Constrained Least Squares Filtering');%使用约束最小二乘过滤恢复模糊

subplot(2,3,6); imshow(deconvreg(blurred_noisy, PSF,0)); title('Regul in Matlab');

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

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

相关文章

用GPT-4写代码不用翻墙了?Cursor告诉你:可以~~

目录 一、介绍 二、使用方法 三、其他实例 1.正则表达式 2.自动化测试脚本 3.聊聊技术 一、介绍 Cursor主要功能是根据用户的描述写代码或者进行对话&#xff0c;对话的范围仅限技术方面。优点是不用翻墙、不需要账号。Cursor基于GPT模型&#xff0c;具体什么版本不祥&#…

ChatGPT文本框再次升级,打造出新型操作系统

在ChatGPT到来之前&#xff0c;没有谁能够预见。但是&#xff0c;它最终还是来了&#xff0c;并引起了不小的轰动&#xff0c;甚至有可能颠覆整个行业。 从某种程度上说&#xff0c;ChatGPT可能是历史上增长最快的应用程序&#xff0c;仅在两个多月就拥有了1亿多活跃用户&…

2023年4月企业内部定制课程简章

2023年4月企业内部定制课程简章 》》数据治理内训 数据管理基础 数据处理伦理 数据治理 数据架构 数据建模和设计 数据安全 数据集成和互操作 文件和内容管理 参考数据和主数据 数据仓库和商务智能 元数据管理 数据质量 大数据和数据科学 数据管理成熟度评估 数据管理组织与…

js基础之Promise(全面+手写实现)

1. 是什么 Promise是一种异步编程的解决方案&#xff0c;用于处理异步操作并返回结果。 主要作用是解决回调函数嵌套&#xff08;回调地狱&#xff09;的问题&#xff0c;使异步操作更加清晰、易于理解和维护。 2. 怎么用 Promise有三种状态&#xff1a;pending&#xff08;…

(大数据开发随笔8)Hadoop 3.3.x分布式环境部署——补充知识

索引克隆虚拟机SSH免密登录ssh简介免密登录scp命令时间同步克隆虚拟机 克隆&#xff1a;注意要分开放置三个虚拟机的位置 修改克隆机的ip地址 vi /etc/sysconfig/network-scripts/ifcfg-ens33——IPADDR重启网络 systemctl restart networkip addr 查看ip地址 修改克隆机的主…

【STM32学习】直接存储器访问——DMA

【STM32学习】直接存储器访问——DMA零、参考一、对DMA的理解二、DMA通道优先级三、DMA通道x传输数量寄存器(DMA_CNDTRx)四、DMA缓冲区设计零、参考 一个严谨的STM32串口DMA发送&接收&#xff08;1.5Mbps波特率&#xff09;机制 【组件】通用环形缓冲区模块 上述是我的参考…

ServletContext 对象

1.共享数据 ServletContext 对象 先调用对象&#xff0c;获取对象&#xff0c;往里面存数据 package com.kuang.servlet;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.…

Pandas.read_excel详解

文章目录基础知识语法参数详解-index_col参数详解-header参数详解-usecols参数详解-dtype其他参数多表读取顺带提一句如何用pandas写数据到excel基础知识 pandas 可以读取多种的数据格式&#xff0c;针对excel来说&#xff0c;可以使用read_excel()读取数据&#xff0c;如下&a…

实现在SpringBoot项目中使用腾讯云发送短信

在一些项目中总会不可避免的要用到短信服务&#xff0c;比如发送验证码等&#xff0c;那么如何进行短信的发送呢&#xff0c;我们这就来捋一捋&#xff0c;我这里采用的是腾讯云的短信服务。其他的云服务也大致一样。 第一步、申请腾讯云的短信服务并配置基本信息 首先进入腾讯…

2023年Q1京东大家电销售数据分析(京东行业大盘销量查询)

2023年第一季度&#xff0c;大家电线上市场的涨势有点放缓&#xff0c;相较于去年的涨幅&#xff0c;今年有收敛不少。下面&#xff0c;我们以京东平台的数据作为线上市场表现的参考。 根据鲸参谋数据显示&#xff0c;今年Q1季度大家电在京东的累计销量超过1600万件&#xff0c…

FE_CSS 页面布局之盒子模型 边框 内外边距

1 盒子模型&#xff08;Box Model&#xff09;组成 所谓 盒子模型&#xff1a;就是把 HTML 页面中的布局元素看作是一个矩形的盒子&#xff0c;也就是一个盛装内容的容器。 CSS 盒子模型本质上是一个盒子&#xff0c;封装周围的 HTML 元素&#xff0c;它包括&#xff1a;边框、…

用户体验设计之记忆(Memory)

&#x1f525;人类记忆的基础 记忆是能够记住过去的经历&#xff0c;以及回忆和唤起它们去影响当下的能力 记忆是由encoding&#xff08;把外界刺激进入大脑转换成可以记忆的格式&#xff09;、storage&#xff08;在大脑中开辟存储记忆的空间&#xff09;、retrieval&#x…

C语言文件操作复习回顾(1)

关于流&#xff0c;内存数据读写铺垫的复习 打开一个文件 -> 内存里面就会创建一个对应关联的文件信息区 -> 文件信息区其实就是一个FILE类型的结构体 -> 各个结构体成员记录了该文件的种种信息 -> 结构体(文件信息区)由FILE* 结构体指针来维护 -> 有了指针&am…

Linux -- 基础IO

文章目录1. 基础认识2. 回顾C文件接口2.1 现象一2.2 现象二2.3 fprintf()函数回顾2.4 fnprintf()函数使用2.5 "a"模式3. 系统接口3.1 open()和close()3.2 write()3.3 read()3.4 C文件接口和系统接口关系3.5 文件描述符3.6 深度理解Linux下一切皆文件3.7 FILE是什么3.…

OpenAI的ChatGPT迭代速度超乎想象

OpenAI的ChatGPT迭代速度超乎想象&#xff0c;被谷歌聊天机器人Bard 嘲笑“家里不通网”后&#xff0c;OpenAI一个鲤鱼打挺甩出“实时联网”方案。 美西时间3月23日&#xff0c;OpenAI宣布推出ChatGPT Plugins&#xff08;插件集&#xff09;&#xff0c;赋予ChatGPT实时更新、…

chatGPT文章生成插件-用chatGPT写文章接入网站

chatGPT文章生成插件 ChatGPT是一种强大的自然语言生成技术&#xff0c;可以用于生成文章、文本摘要、对话生成、语言翻译等多种应用场景。在实际应用中&#xff0c;可以使用一些插件来实现ChatGPT的文章生成功能&#xff0c;以下是一些可能有用的插件介绍&#xff1a; AI Wri…

【CSS】实现梯形

简单说一下背景&#xff0c;就是需要实现一个展开收起的按钮。 那我第一个想到的方法&#xff0c;可不就是border自己画嘛。 1、border边框 width: 150px; border-top: 50px solid red; // 梯形的高 border-right: 50px solid transparent; // 往右延伸 border-bottom: 50px …

75-网络二(网络分层模型)

网络二二.网络分层模型1.网络协议(1)什么是网络协议(2)常见的协议2.OSI的7层模型与tcp/ip协议族体系4层结构(1)数据链路层(2)网络层(3)传输层(4)应用层3.为什么要分层?三.网络应用程序的通信流程网络一见:网络一 二.网络分层模型 1.网络协议 (1)什么是网络协议 网络协议就…

Python 小型项目大全 76~81

七十六、井字棋 原文&#xff1a;http://inventwithpython.com/bigbookpython/project76.html 井字棋是一种在3 3网格上玩的经典纸笔游戏。玩家轮流放置 X 或 O 标记&#xff0c;试图连续获得三个。大多数井字棋都以平局告终&#xff0c;但如果你的对手不小心&#xff0c;你也…

Three.js教程:顶点位置数据解析渲染

推荐&#xff1a;将NSDT场景编辑器加入你3D工具链其他工具系列&#xff1a;NSDT简石数字孪生顶点位置数据解析渲染 如果你没有WebGL基础&#xff0c;可以先不用记忆每个的threejs 具体内容&#xff0c;有一个大致印象即可&#xff0c;学习本节课的重点是建立顶点的概念。如果你…