数字图像处理实验(三)|图像增强{归一化直方图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


相关文章
|
9月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
4月前
|
存储 算法 数据可视化
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
145 2
|
2月前
|
算法 图形学
三维球体空间中光线反射模拟与三维点云提取matlab仿真
本项目使用MATLAB2022A模拟三维椭球体内光线反射并提取三维点云。通过设置椭球模型作为墙壁,根据几何光学原理计算光线在曲面上的反射路径,记录每次反射点坐标,生成三维点云图。核心代码实现多次反射的循环计算与绘图,并展示反射点的位置变化及其平滑处理结果。最终,通过光线追踪技术模拟真实场景中的光线行为,生成精确的三维点云数据,适用于计算机图形学和光学仿真领域。
130 27
|
4月前
|
算法 5G 数据安全/隐私保护
MIMO系统中差分空间调制解调matlab误码率仿真
本项目展示了一种基于Matlab 2022a的差分空间调制(Differential Space Modulation, DMS)算法。DMS是一种应用于MIMO通信系统的信号传输技术,通过空间域的不同天线传输符号序列,并利用差分编码进行解调。项目包括算法运行效果图预览、核心代码及详细中文注释、理论概述等内容。在发送端,每次仅激活一个天线发送符号;在接收端,通过差分解调估计符号和天线选择。DMS在快速衰落信道中表现出色,尤其适用于高速移动和卫星通信系统。
|
5月前
|
算法 5G 数据安全/隐私保护
SCM信道模型和SCME信道模型的matlab特性仿真,对比空间相关性,时间相关性,频率相关性
该简介展示了使用MATLAB 2022a进行无线通信信道仿真的结果,仿真表明信道的时间、频率和空间相关性随间隔增加而减弱,并且宏小区与微小区间的相关性相似。文中介绍了SCM和SCME模型,分别用于WCDMA和LTE/5G系统仿真,重点在于其空间、时间和频率相关性的建模。SCME模型在SCM的基础上进行了扩展,提供了更精细的参数化,增强了模型的真实性和复杂度。最后附上了MATLAB核心程序,用于计算不同天线间距下的空间互相关性。
119 0
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
7月前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
495 12
|
8月前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)
基于高通滤波器的ECG信号滤波及心率统计matlab仿真
**摘要:** 使用MATLAB2022a,实施高通滤波对ECG信号预处理,消除基线漂移,随后分析心率。系统仿真展示效果,核心代码涉及IIR HPF设计,如二阶滤波器的差分方程。通过滤波后的信号,检测R波计算RR间期,从而得到心率。滤波与R波检测是心电生理研究的关键步骤,平衡滤波性能与计算资源是设计挑战。
|
9月前
matlab使用hampel滤波,去除异常值
matlab使用hampel滤波,去除异常值