数字图像处理实验(三)|图像增强{归一化直方图imhist(f)/numel(f)、直方图均衡化histeq、生成线性空间滤波fspecial、中值滤波medfilt2}(附matlab实验代码截图)

简介: 数字图像处理实验(三)|图像增强{归一化直方图imhist(f)/numel(f)、直方图均衡化histeq、生成线性空间滤波fspecial、中值滤波medfilt2}(附matlab实验代码截图)

一、实验目的


(1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法。

(2)掌握MATLAB中图像增强的相关函数。

(3)掌握图像灰度修正、平滑去噪的方法并编程实现。

(4) 理解低通和高通滤波器的使用方法,明确不同性质的滤波器对图像的影响和作用。


二、实验原理


图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。

本实验以灰度变换、直方图均衡化、均值滤波、中值滤波、理想低通(或高通)的方法为主要内容,其他方法可以在课后自行练习。


1. 基本亮度变换函数


亮度(灰度)变换函数分为线性变换和非线性变换,非线性变换中分为对数变换和幂变换。

g=imadjust(f, [low_in high_in], [low_out high_out],gamma)


说明:将图像f中的亮度值映像到g中的新值,即将low_in至high_in之间的灰度值映射到low_out至high_out之间的灰度值, low_in以下的值映射为low_out, high_in以上的值映射为high_out。

参数gamma指定了映射曲线的形状。

0a2653c851af460fa595bd959398a8f1.png


2.直方图均衡化


直方图是多种空间域处理技术的基础,是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况,对直方图的操作能有效地用于图像增强。

(1)直方图的绘制

imhist(f); %直接绘制直方图的最简方法,没有规定输出的函数。灰度级为256级。

imhist(f,b); % b为指定的灰度级数。每一级对应的纵坐标为此灰度级区间的所有像素个数。

归一化直方图:imhist(f)/numel(f)

(2)直方图均衡化

直方图均衡化的基本思想是把原始图像的直方图变换为均匀分布的形式,从而增加图像灰度的动态范围,改善图像的亮度分布状态,达到增强图像对比度的效果,从而增强图像的视觉效果。

histeq(f,n):f为原图像,n为均衡化后的灰度级数;若n等于原图像灰度级数,则直接执行;若小于原灰度级,则重新分配。

histeq(f):f为原图像,n省略,为64.


3.空间域滤波


用模板对图像进行邻域运算处理。若对邻域中像素执行的计算为线性的,则称该操作为线性空间滤波;若为非线性的则称为非线性空间滤波。

(1)线性空间滤波

基本步骤:

① 选取原点,模板在输入图像上移动,让模板原点依次与输入图像中的每个像素重合;

② 将模板系数与跟模板重合的输入图像的对应像素相乘,再将乘积相加;

③ 把结果赋予输出图像,其像素位置与模板原点在输入图像上的位置一致。

常用的模板:一般模板大小取奇数值。常见为33 , 55

典型代表为邻域平均法:BOX模板邻域平均和高斯平滑


0a2653c851af460fa595bd959398a8f1.png


(a) 3×3 BOX模板 (b) 3×3高斯模板

相关函数:imfilter

调用格式: g=imfilter(f, w, filter_mode, boundary_options, size_options)

f:输入图像 w:滤波模板

filter_mode: ’corr’、’conv’

boundary_options:

P为扩充,默认为扩充0;

‘replicate’:复制边界(最常用)

size_options: ’full’ 或 ’same’(默认值)

线性空间滤波用fspecial和imfilter结合使用。


附:生成线性空间滤波器函数: w=fspecial(‘type’,parameters)

parameters为可选项,是和所选定的滤波器类型type相关的配置参数,如尺寸。

type为滤波器的类型。其合法值如下:


合法取值 功能

‘average’ 平均模板

‘disk’ 圆形领域的平均模板

‘gaussian’ 高斯模板

‘laplacian’ 拉普拉斯模板

‘log’ 高斯-拉普拉斯模板

‘prewitt’ Prewitt水平边缘检测算子

‘sobel’ Sobel水平边缘检测算子


(2)非线性空间滤波:中值滤波

也称统计排序滤波,对邻域所包含的像素进行排序,然后使用排序结果确定的值替换邻域中的中心像素值。它在一定条件下,可以克服线性滤波器(如邻域平滑滤波等)所带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。

中值滤波的窗口尺寸和形状对滤波效果影响较大,往往应根据不同的图像内容和不同的要求加以选择。

(a)窗口尺寸的选择可以先试用小尺寸窗口,再逐渐增大窗口尺寸,以不超过图像中最小有效物体的尺寸为宜直到滤波效果满意为止。

(b)对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗口为宜。对于包含有尖顶角物体的图像,用十字形窗口。如果图像中点、线、尖角细节较多,则不宜采用中值滤波。

相关函数:medfilt2

调用格式:g=medfilt2(f, [m n], padopt)

[m n]为邻域大小;

Padopt为边界填充方式:

(1)zeros:填充0,为默认

(2)symmetric:镜像反射扩展

(3)indexed:若f为double型的,则填充1;否则填充0

最简调用格式:medfilt2(f)


4.频率域滤波


通过正交变换将图像变换至频率域,通过对频率域频谱系数的分布特点,构建合适的频域滤波器,选择合适的截止频率,对图像进行频域滤波从而达到图像增强的目的。

本实验通过理想低通滤波和理想高通滤波的练习巩固频域滤波原理及实现过程。


三、预备知识:


噪声添加:

h=imnoise(I,type,parameters);

type为噪声类型,合法值如下:


‘gaussian’ 高斯白噪声:幅度为高斯分布,功率谱均匀分布

‘salt & pepper’ 黑点如胡椒,白点如盐粒。由图像传感器、传输信道、解码处理、图像切割等产生的黑白相间的亮暗点噪声。


parameters:其他参数,如均值和方差

常用函数格式:

imnoise(f,‘gaussian’, mean,var): 默认均值为0,方差为0.01

imnoise(f,‘salt & pepper’,d): d为噪声密度,默认为0.05


四、实验内容


1.灰度修正


用课上讲的灰度变换理论解释下列程序功能,总结图像变化特点;若将参数0.5换成1或者0.1则图像变化会有什么不同(在实验报告中给出结论)。

1的话就是平均映射,0.1则会将暗部调亮、整体增大亮度

f = imread ( ‘coins.png’); imshow(f);

g1=imadjust(f, [0 1], [1 0]); figure, imshow(g1);

g2=imadjust(f, [0.5 0.75], [1 0], 0.5); figure, imshow(g2);

g3=imadjust(f,[0 1], [0.3 0.7], 0.5);figure, imshow(g3);


2.直方图均衡化:


(要求:对程序中的每一行给予注释并运行,将效果图记录入实验报告,根据两个直方图特点说明直方图均衡化的效果及意义。)

层次更加鲜明

MATLAB程序:

I=imread(‘coins.tif);

J=histeq(I);

imshow(I);

title(‘原图像’);

figure;imshow(J);

title(‘直方图均衡化后的图像’) ;

figure; subplot(1,2,1) ;

imhist(I);

title(‘原图像直方图’) ;

subplot(1,2,2);

imhist(J) ;

title(‘均衡变换后的直方图’) ;


3.空间域滤波


(1)任意选择一幅图像,分别加入高斯噪声和椒盐噪声,对每一幅噪声图像分别进行33和55均值处理,在同一窗口显示原图像、噪声图像、均值滤波后的图像(共7幅图像)对结果进行分析。

滤波的同时,原图像也在变得模糊了

(2)任意选择一幅图像,加入均值0方差为0.01的高斯噪声,对其分别用33和55的模板进行中值滤波并分析结果。

33和55效果都很好,噪声基本看不出来,原图像略有损失

(3)任意选择一幅图像,加入噪声密度为0.05和0.2的椒盐噪声,对其分别用33和55(或更大)的模板进行中值滤波并分析结果。

33的效果不好,还存在一些噪声,55表现不错


4. 频域率滤波


练习(1)

clear;clc;
I1=imread(‘lena.jpg’);imshow(I1);
FS=fftshift(fft2(I1));
[M,N] = size(FS);
freq=50;
for u=1:M
for v=1:N
if (sqrt(((u-M/2)2+(v-N/2)2))>freq)
FS(u,v)=0;
end
end
end
I=ifft2(ifftshift(FS));
figure,imshow(uint8(I));

运行上述程序并回答:此段程序实现的什么功能?图像处理后有什么特点(效应)。

低通滤波,通过傅里叶变换后,图像进行50位阈值的低通滤波,轮廓有振铃现象

练习(2)

clear;clc;
I1=imread(‘lena.jpg’);imshow(I1);
FS=fftshift(fft2(I1));
[M,N] = size(FS);
freq=15; %分别改为30,40观察一下效果
for u=1:M
for v=1:N
if (sqrt(((u-M/2)2+(v-N/2)2))<freq)
FS(u,v)=0;
end
end
end
I=ifft2(ifftshift(FS));
figure,imshow(uint8(I));

运行上述程序并回答:此段程序实现的什么功能?图像处理后有什么特点。

高通滤波,信息量保存下来的较少,显示的图像缺失严重


五、思考题


1.对实验中遇到的问题,进行讨论。

2. 在滤波过程中,图像的边界问题如何处理?

要么不进行处理、处理分两种,其一是在外围再补一圈,依据内框的统计特征。


六、实验代码


%% 1
f = imread ( 'coins.png'); imshow(f);
g1=imadjust(f, [0 1], [1 0]); figure, imshow(g1);
g2=imadjust(f, [0.5 0.75], [1 0], 0.5); figure, imshow(g2);
g3=imadjust(f,[0 1], [0.3 0.7], 0.5);figure, imshow(g3);
%% 2
I=imread('coins.png'); % 读取图像
J=histeq(I); %对图像进行直方均衡化,默认灰度级数为64
imshow(I);  % 显示原图像
title('原图像');  % 标题注释
figure;imshow(J);  %分块
title('直方图均衡化后的图像') ; % 标题注释
figure; subplot(1,2,1) ;%分块
imhist(I);  %显示原图像直方图
title('原图像直方图') ; % 标题注释
subplot(1,2,2);  %分块
imhist(J) ; %显示均衡变换后的直方图
title('均衡变换后的直方图') ; % 标题注释
%% 3
%(1)
clc,clear
close all
I = imread('coins.png');
J_ng = imnoise(I,'gaussian');
J_ns = imnoise(I,'salt & pepper');
t_t = 1/9*ones(3,3);
f_f = 1/25*ones(5,5);
g_ng_t = filter2(t_t,J_ng);
g_ng_f = filter2(f_f,J_ng);
g_ns_t = filter2(t_t,J_ns);
g_ns_f = filter2(f_f,J_ns);
figure
subplot(2,2,1);imshow(I);title('原图像')
subplot(2,2,2);imshow(J_ng);title('高斯噪声图像')
subplot(2,2,3);imshow(g_ng_t,[]);title('3*3均值滤波图像')
subplot(2,2,4);imshow(g_ng_f,[]);title('5*5均值滤波图像')
figure
subplot(2,2,1);imshow(I);title('原图像')
subplot(2,2,2);imshow(J_ns);title('椒盐噪声图像')
subplot(2,2,3);imshow(uint8(g_ns_t));title('3*3均值滤波图像')
subplot(2,2,4);imshow(g_ns_f,[]);title('5*5均值滤波图像')
% (2)
I = imread('coins.png');
J_ng = imnoise(I,'gaussian',0,0.01);
g_ng_t = medfilt2(J_ng,[3 3]);
g_ng_f = medfilt2(J_ng,[5 5]);
figure
subplot(2,2,1);imshow(I);title('原图像')
subplot(2,2,2);imshow(J_ng);title('均值0,方差0.01高斯噪声图像')
subplot(2,2,3);imshow(g_ng_t,[]);title('3*3中值滤波图像')
subplot(2,2,4);imshow(g_ng_f,[]);title('5*5中值滤波图像')
% (3)
I = imread('coins.png');
J_ns_zf = imnoise(I,'salt & pepper',0.05);
J_ns_t = imnoise(I,'salt & pepper',0.2);
g_ns_zf_t = medfilt2(J_ns_zf,[3 3]);
g_ns_zf_f = medfilt2(J_ns_zf,[5 5]);
g_ns_t_t = medfilt2(J_ns_t,[3 3]);
g_ns_t_f = medfilt2(J_ns_t,[5 5]);
figure
subplot(2,2,1);imshow(I);title('原图像')
subplot(2,2,2);imshow(J_ns_zf);title('密度0.05椒盐噪声图像')
subplot(2,2,3);imshow(g_ns_zf_t,[]);title('3*3中值滤波图像')
subplot(2,2,4);imshow(g_ns_zf_f,[]);title('5*5中值滤波图像')
figure
subplot(2,2,1);imshow(I);title('原图像')
subplot(2,2,2);imshow(J_ns_t);title('密度0.2椒盐噪声图像')
subplot(2,2,3);imshow(g_ns_t_t,[]);title('3*3中值滤波图像')
subplot(2,2,4);imshow(g_ns_t_f,[]);title('5*5中值滤波图像')
%% 4 (1)
clear;clc;
I1=imread('C:\Users\DELL\Desktop\lena.jpg');imshow(I1);
FS=fftshift(fft2(I1));
[M,N] = size(FS);
freq=50;
for u=1:M
    for v=1:N
        if (sqrt(((u-M/2)^2+(v-N/2)^2))>freq)
            FS(u,v)=0;
        end
    end
end
I=ifft2(ifftshift(FS));
figure,imshow(uint8(I)); 
%% 4 (2)
clear;clc;
I1=imread('C:\Users\DELL\Desktop\lena.jpg');imshow(I1);
FS=fftshift(fft2(I1));
[M,N] = size(FS);
freq=15;  %分别改为30,40观察一下效果
for u=1:M
    for v=1:N
        if (sqrt(((u-M/2)^2+(v-N/2)^2))<freq)        
            FS(u,v)=0;
        end
    end
end
I=ifft2(ifftshift(FS));
figure,imshow(uint8(I));


七、实验截图


0a2653c851af460fa595bd959398a8f1.png0eacb84100b54626af849e6b562bf92a.png2d65d23f6d4748949b924e4057485923.png2e9b90b2ca334476abebe75bafe6eeaa.png4cebaac233b3433da32a72337a77fc60.png6de278e6d6694ce5bb08e7e842b7e74b.png7a399525ddec4b77923c464820b33738 (1).png


相关文章
|
6天前
|
存储
MATLAB - 使用 MPC Designer 线性化 Simulink 模型
MATLAB - 使用 MPC Designer 线性化 Simulink 模型
6 1
|
17天前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
5天前
|
自然语言处理
一级倒立摆控制 - 非线性 MPC 控制及 MATLAB 实现
一级倒立摆控制 - 非线性 MPC 控制及 MATLAB 实现
9 0
|
6天前
|
机器学习/深度学习 编解码 Android开发
MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类
MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类
18 0
|
1月前
|
算法
基于粒子群优化的图像融合算法matlab仿真
这是一个基于粒子群优化(PSO)的图像融合算法,旨在将彩色模糊图像与清晰灰度图像融合成彩色清晰图像。在MATLAB2022a中测试,算法通过PSO求解最优融合权值参数,经过多次迭代更新粒子速度和位置,以优化融合效果。核心代码展示了PSO的迭代过程及融合策略。最终,使用加权平均法融合图像,其中权重由PSO计算得出。该算法体现了PSO在图像融合领域的高效性和融合质量。
|
17天前
【光波电子学】MATLAB绘制光纤中线性偏振模式LP之单模光纤的电场分布(光斑)
该文章介绍了如何使用MATLAB绘制单模光纤中线性偏振模式LP₀₁的电场分布,并提供了相关的数学公式和参数用于模拟光纤中的光斑分布。
13 0
|
2月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
2月前
|
算法 计算机视觉
基于Chan-Vese算法的图像边缘提取matlab仿真
**算法预览展示了4幅图像,从边缘检测到最终分割,体现了在matlab2022a中应用的Chan-Vese水平集迭代过程。核心代码段用于更新水平集并显示迭代效果,最后生成分割结果及误差曲线。Chan-Vese模型(2001)是图像分割的经典方法,通过最小化能量函数自动检测平滑区域和清晰边界的图像分割,适用于复杂环境,广泛应用于医学影像和机器视觉。**
|
12天前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
31 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
13天前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
39 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现

热门文章

最新文章