图像复原与重建MATLAB实验

news2024/10/5 11:01:51

文章目录

    • 一、实验目的
    • 二、实验内容
      • 1. 噪声图像及其直方图。
      • 2. 空间噪声滤波器。
      • 3. 逆滤波。

一、实验目的

  1. 了解一些常用随机噪声的生成方法。
  2. 掌握根据指定退化函数对图像进行退化的方法。
  3. 掌握当模糊图像只存在噪声时的几种滤波复原方法。
  4. 掌握当模糊图像同时存在线性退化和噪声时的几种滤波复原方法。

二、实验内容

1. 噪声图像及其直方图。

图1显示了一幅测试图像,它由简单的恒定区域组成,且其从黑到近似于白仅有3个灰度级增长跨度,非常适合于对附加在图像上的各种噪声成分特性的视觉分析。请进行以下操作:
(1) 对图1叠加高斯噪声,参数 a = 0 a=0 a=0 b = 0.02 b=0.02 b=0.02 ,并求含噪声图像的直方图。
(2) 对图1叠加瑞利噪声,参数 a = 0 a=0 a=0 b = 0.01 b=0.01 b=0.01 ,并求含噪声图像的直方图。
(3) 对图1叠加爱尔兰噪声,参数 a = 25 a=25 a=25 b = 2 b=2 b=2 ,并求含噪声图像的直方图。
(4) 对图1叠加指数噪声,参数 a = 25 a=25 a=25,并求含噪声图像的直方图。
(5) 对图1叠加均匀噪声,参数 a = 0 a=0 a=0 b = 0.15 b=0.15 b=0.15 ,并求含噪声图像的直方图。
(6) 对图1叠加椒盐噪声,参数 a = 0.05 a=0.05 a=0.05 b = 0.05 b=0.05 b=0.05 ,并求含噪声图像的直方图。提示:加椒盐噪声时,要结合find函数。找出生成的噪声R中值为0的点,将原图像中相应位置置0;找出生成的噪声R中值为1的点,将原图像中相应位置置1,以完成椒盐噪声的添加。

在这里插入图片描述

f=imread('1.测试图像.tif');
f=im2double(f);
[M,N]=size(f);
R1=imnoise2('gaussian',M,N,0,0.02);
y1=f+R1;
figure; subplot(251);imshow(y1);subplot(256);imhist(y1);
imwrite(y1,'加高斯噪声后的图像.tif');

%---------------rayleigh噪声-----------------------------%

R2=imnoise2('rayleigh', M,N,0,0.01);
y2=f+R2;
subplot(252);imshow(y2);subplot(257);imhist(y2);
imwrite(y2,'加高斯噪声后的图像.tif');

%--------------------伽马(爱尔兰)噪声-----------------------------%
R3=imnoise2('erlang',M,N,25,2);
y3=f+R3;
subplot(253);imshow(y3);subplot(258);imhist(y3);
imwrite(y3,'加伽马(爱尔兰)噪声后的图像.tif');

%--------------------指数噪声-----------------------------%

R4=imnoise2('exponential',M,N,25);
y4=f+R4;
subplot(254);imshow(y4);subplot(259);imhist(y4);
imwrite(y4,'加指数噪声后的图像.tif');

%--------------------均匀噪声-----------------------------%

R5=imnoise2('uniform',M,N,0,0.15);
y5=f+R5;
subplot(255);imshow(y5);subplot(2,5,10);imhist(y5);
imwrite(y5,'加均匀噪声后的图像.tif');

在这里插入图片描述

%--------------------椒盐噪声-----------------------------%
R6=imnoise2('salt & pepper',M,N,0.05,0.05);
p=find(R6==0);
y6=f;
y6(p)=0.01;
s=find(R6==1);
y6(s)=0.99;
y6=im2uint8(y6);
figure; imshow(y6);
figure;imshow(y6);imhist(y6)

在这里插入图片描述

2. 空间噪声滤波器。

图2是一幅被加性均匀噪声和椒盐噪声污染的图像,请进行以下实验:
(1) 用大小为 5 × 5 5\times 5 5×5 的算术平均滤波器对图2进行滤波。
(2) 用大小为 5 × 5 5\times 5 5×5 的几何均值滤波器对图2进行滤波。
(3) 用大小为 5 × 5 5\times 5 5×5 的中值滤波器对图2进行滤波。
(4) 用大小为 5 × 5 5\times 5 5×5 d = 6 d=6 d=6 的修正阿尔法均值滤波器对图2进行滤波。

在这里插入图片描述

答:
(1)
(2)

gp = zeros(M+4, N+4);
gp(3:M+2,3:N+2) = f;

gp(1,:) = gp(3,:); %用图像最外层的值扩展
gp(2,:) = gp(3,:);
gp(M+4,:)=gp(M+2,:);
gp(M+3,:)=gp(M+2,:);
gp(:,2)=gp(:,3);
gp(:,1)=gp(:,3);
gp(:,N+4)=gp(:,N+2);
gp(:,N+3)=gp(:,N+2);

g2 = zeros(M, N);
for x = 3:M+2
    for y = 3:N+2
        g_gmf = 1;
        for i = -2:2
            for j = -2:2
                g_gmf = g_gmf*gp(x+i,y+j);
            end
        end
        g2(x-2,y-2)=g_gmf;
    end
end
g2=g2.^(1/9);
g2=im2uint8(g2);
figure; imshow(g2);
imwrite(g2,'5×5 几何均值滤波图像.tif');

在这里插入图片描述

% 1. 读取图像
img = imread('2.被加性均匀噪声和椒盐噪声污染的图像.tif');

% 2. 检查图像是否为彩色图像,如果是,则将其转换为灰度图像
if ndims(img) == 3
    img_gray = rgb2gray(img);
else
    img_gray = img;
end

% 3. 对灰度图像应用5x5中值滤波器
filtered_img = medfilt2(img_gray, [5, 5]);

% 4. 显示原始图像和处理后的图像
figure;
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');

subplot(1, 2, 2);
imshow(filtered_img);
title('Filtered Image with Median Filter');

% 5. 保存处理后的图像
imwrite(filtered_img, 'output_image.jpg');

在这里插入图片描述

% 1. 读取图像
img = imread('input_image.jpg');

% 2. 检查图像是否为彩色图像,如果是,则将其转换为灰度图像
if ndims(img) == 3
    img_gray = rgb2gray(img);
else
    img_gray = img;
end

% 3. 对灰度图像应用5x5修正阿尔法均值滤波器 (d = 6)
filtered_img = modified_alpha_trimmed_mean_filter(img_gray, 5, 6);

% 4. 显示原始图像和处理后的图像
figure;
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');

subplot(1, 2, 2);
imshow(filtered_img);
title('Filtered Image with Modified Alpha-trimmed Mean Filter');

% 5. 保存处理后的图像
imwrite(filtered_img, 'output_image.jpg');

function output_img = modified_alpha_trimmed_mean_filter(img, filter_size, d)
    img = double(img);
    [rows, cols] = size(img);
    output_img = zeros(rows, cols);

    pad_size = floor(filter_size / 2);
    padded_img = padarray(img, [pad_size pad_size], 'replicate');
    
    for i = 1:rows
        for j = 1:cols
            window = padded_img(i:i+filter_size-1, j:j+filter_size-1);
            window_sorted = sort(window(:));
            output_img(i, j) = mean(window_sorted(d/2 + 1:end - d/2));
        end
    end
    
    output_img = uint8(output_img);
end

在这里插入图片描述

3. 逆滤波。

图3为一幅大小为480×480的模糊图像,其退化函数如式(1)所示:
H ( u , v ) = e − k [ ( u − M / 2 ) 2 + ( v − N / 2 ) 2 ] 5 / 6 (1) H(u,v)={{\text{e}}^{-k{{[{{(u-M/2)}^{2}}+{{(v-N/2)}^{2}}]}^{5/6}}}}\tag1 H(u,v)=ek[(uM/2)2+(vN/2)2]5/6(1)

其中, k = 0.0025 k=0.0025 k=0.0025 M = N = 480 M=N=480 M=N=480。请根据式(2)及以下要求对图3图像进行逆滤波操作:
F ^ ( u , v ) = G ( u , v ) H ( u , v ) (2) \hat{F}(u,v)=\frac{G(u,v)}{H(u,v)}\tag2 F^(u,v)=H(u,v)G(u,v)(2)

(1) 请对图3直接进行逆滤波(全滤波)。

(2) 使用一个阶数为10的巴特沃斯低通函数来对比值 G ( u , v ) H ( u , v ) \frac{G(u,v)}{H(u,v)} H(u,v)G(u,v) 实现截止,截止半径分别设置为40、70和85。

(3) 对比分析实验结果。

在这里插入图片描述
答:
(1)

close all; clear all; clc;
f = imread('3.大小为480×480的模糊图像.tif');
figure; imshow(f);
f=im2double(f);
[M, N] = size(f);
F= fft2(f);
Fc=fftshift(F);
[v, u]=meshgrid(1:N, 1:M);
H=exp(-0.0025*((u-M/2).^2+(v-N/2).^2).^(5/6));
G=Fc./(H+eps);
G1=ifftshift(G);
g1=ifft2(G1);
figure; imshow(g1, []);

在这里插入图片描述
(2)

%---------截止半径设置为 40---------%
H2= zeros(M,N);
D0 = 40;
for x = 1:1:M
    for y = 1:1:N
        D = ((x-M/2)^2 + (y-N/2)^2)^(0.5);
        H2(x,y) = 1/(1+(D/D0)^20);
    end
end
G2=G.*H2;
G2=ifftshift(G2);
g2=ifft2(G2);
subplot(131); imshow(g2, []);title('截止半径为40');

%---------截止半径设置为 70---------%
H2= zeros(M,N);
D0 = 70;
for x = 1:1:M
    for y = 1:1:N
        D = ((x-M/2)^2 + (y-N/2)^2)^(0.5);
        H2(x,y) = 1/(1+(D/D0)^20);
    end
end
G2=G.*H2;
G2=ifftshift(G2);
g2=ifft2(G2);
subplot(132); imshow(g2, []);title('截止半径为70');


%---------截止半径设置为 85---------%
H2= zeros(M,N);
D0 = 85;
for x = 1:1:M
    for y = 1:1:N
        D = ((x-M/2)^2 + (y-N/2)^2)^(0.5);
        H2(x,y) = 1/(1+(D/D0)^20);
    end
end
G2=G.*H2;
G2=ifftshift(G2);
g2=ifft2(G2);
subplot(133); imshow(g2, []);title('截止半径为85');

在这里插入图片描述

(3)
当退化函数为0或者是很小的值,直接使用逆滤波公式会导致 N ( u , v ) / H ( u , v ) N\left( u,v \right)/H\left( u,v \right) N(u,v)/H(u,v) F ∧   ( u , v ) \overset{\wedge }{\mathop{F}}\,(u,v) F(u,v) 起到支配作用。频域率转变为空间域就会产生错误的结果。

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

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

相关文章

学会搭建小程序生鲜商城,开启生鲜电商新模式

电商平台的出现,为人们带来了极大的便利。然而,传统的电商平台已经不能满足消费者对于购物体验的要求。如今,小程序生鲜商城因其轻量化、高效率等特点,成为了众多卖家的首选。本文将介绍如何学会搭建小程序生鲜商城,并…

二分特训上------刷题部分----Week4(附带LeetCode特训)

二分特训上------理论部分----Week4(附带LeetCode特训)_小杰312的博客-CSDN博客 如果需要理论,请移步上一篇. /***** 注意:我们把 0000001111111模型中:0称呼为左边区间,1称呼为右边区间 (答案第一个1在右区间) 1111…

浅谈Redis

一、Redis的简介 1.开源免费的缓存中间件,性能高,读可达110000次/s,写可达81000次/s。 2.redis的单线程讨论: V4.0之前:是单线程的,所有任务处理都在一个线程内完成. V4.0:引入多线程,异步线程用于处理一些耗…

机器学习基础学习之线性回归

文章目录 首先从**目标函数**开始梯度下降法结合两个公式,让目标函数梯度下降多项式回归,多重回归解决办法:随机梯度下降 首先从目标函数开始 假设下图反映了 投入多少广告费,产生了多少销售量的关系 图中每个点都是一个数据&a…

Spring Security

1、这是securityConfigpackage com.ruoyi.framework.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpMethod; import org.springframework.security.authe…

【JAVA】Java中方法的使用,理解方法重载和递归

目录 1.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法调用的执行过程 1.4实参和形参 2.方法重载 2.1为什么需要使用方法重载 2.2什么是方法重载 3.递归 3.1什么是递归 3.2递归执行的过程 3.3递归的使用 1.方法的概念及使用 1.1什么是方法 方法就是一个代…

消息队列:RabbitMQ

文章目录 消息队列(RabbitMQ)概念优势技术亮点可靠性灵活的路由集群联合高可用的队列多协议广泛的客户端可视化管理工具追踪插件系统 原理:AMQP 0-9-1 模型简介 消息队列(RabbitMQ) 概念 一种异步通信中间件 优势 消…

RHCSA 作业三

1. 2. [rootserver yum.repos.d]# mount /dev/sr0 /media mount: /media: /dev/sr0 已挂载于 /media. [rootserver yum.repos.d]# ls redhat.repo [rootserver yum.repos.d]# vim /etc/yum.repos.d/redhat.repo [rootserver yum.repos.d]# yum makecache 正在更新 Subscripti…

如何管理好团队的工时表?

工时表管理对所有团队来说都是一项具有挑战性的任务。它是确保每个团队成员高效工作并获得最大时间的关键工具。团队工时表是任何项目经理武器库中的一个重要工具。它们提供了对团队表现的宝贵见解。 一个成功的工时表管理系统对于希望最大限度提高生产力和利润的团队成员是必…

360+ChatGLM联手研发中国版“微软+OpenAI”

文章目录 前言360与智谱AI强强联合什么是智谱AI360智脑360GLM与360GPT大模型战略布局写在最后 前言 5月16日,三六零集团(下称“360”)与智谱AI宣布达成战略合作,双方共同研发的千亿级大模型“360GLM”已具备新一代认知智能通用模…

LLMs 诸神之战:LangChain ,以【奥德赛】之名

LLMs 一出,谁与争锋? 毫无疑问,大语言模型(LLM)掀起了新一轮的技术浪潮,成为全球各科技公司争相布局的领域。诚然,技术浪潮源起于 ChatGPT,不过要提及 LLMs 的技术发展的高潮&#x…

React的表单数据绑定

当我们在页面中使用表单提交数据时,react是如何拿取表单数据的呢 这里通过两种方式来实现 非受控组件实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" conte…

在Ubuntu 22.04 LTS Jammy Linux 系统上安装MySQL

在Ubuntu 22.04 LTS Jammy Linux 系统上安装MySQL 1. Update Apt Package Index2. Install MySQL Server & client on Ubuntu 22.043. To Check the version4. Run the Security script to secure MySQL5. Login Database Server as the root user6. Manage MySQL service7…

C-认识指针

认识指针 内容来自《深入理解C指针》 声明指针 在数据类型后面跟上星号*&#xff0c;如下的声明都是等价的 int* pi; int * pi; int *pi; int*pi;阅读声明 如下&#xff1a; const int *pci;1.pci是一个变量 const int *pci; 2.pci是一个指针变量 const int *pci; 3.pci是一…

FMC篇-SDRAM(IS42S16400J)

IS42S16400J 这个东西太常见啦&#xff0c;长方形的。不会过多解释&#xff0c;详细请阅读它的数据手册。 IS42S16400J是一种高速同步动态随机存储器(SDRAM)&#xff0c;64Mb的存储容量&#xff0c;采用4个bank&#xff0c;每个bank大小为16Mb&#xff0c;总线宽度为16位&…

eDiary-白日梦电子记事本基本使用说明【记事本导出和导入方法、本地数据迁移方法、记录工作日报、日历代办等】

文章目录 说明笔记导出与导入导出导入 本地数据迁移及备份本地备份说明恢复 记录工作日报记录今天发生美事等日历代办 说明 因为公司大佬分享资料&#xff0c;需要用到白日梦这个电子记事本&#xff0c;所以才了解到这个软件&#xff0c;体量小&#xff0c;功能高级&#xff0…

图数据库 NebulaGraph 的内存管理实践之 Memory Tracker

数据库的内存管理是数据库内核设计中的重要模块&#xff0c;内存的可度量、可管控是数据库稳定性的重要保障。同样的&#xff0c;内存管理对图数据库 NebulaGraph 也至关重要。 图数据库的多度关联查询特性&#xff0c;往往使图数据库执行层对内存的需求量巨大。本文主要介绍 …

Amazon 一周回顾 – 2022 年 7 月 18 日

上周&#xff0c;Amazon 峰会&#xff08;纽约&#xff09;在贾维茨中心线下举办&#xff0c;有数千名与会者以及 100 多家赞助商和合作伙伴参加。在主题演讲中&#xff0c;Amazon 首席开发人员倡导者 Martin Beeby 谈到了云基础设施的创新如何帮助客户适应挑战并抓住新的机遇。…

开源之夏 2023 | 欢迎参加openEuler A-Tune SIG和Base-service SIG开发任务

开源之夏是中国科学院软件研究所联合openEuler发起的开源软件供应链点亮计划系列暑期活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;促进优秀开源软件社区的蓬勃发展。活动联合各大开源社区&#xff0c;针对重要开源软件的开发与维护提供项目&#x…