数字图像处理实验(三)|图像增强{归一化直方图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指定了映射曲线的形状。
在这里插入图片描述

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模板邻域平均和高斯平滑

在这里插入图片描述

(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)); 

七、实验截图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周末不下雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值