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


相关文章
|
26天前
基于MATLAB实现机器视觉中通过单幅图像实现测量长度面积
基于MATLAB实现机器视觉中通过单幅图像实现测量长度面积
79 1
|
3月前
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
144 35
|
1月前
|
算法 安全 数据安全/隐私保护
基于AES的图像加解密算法matlab仿真,带GUI界面
本程序基于AES算法实现图像的加解密功能,并提供MATLAB GUI界面操作,支持加密与解密。运行环境为MATLAB 2022A,测试结果无水印。核心代码通过按钮回调函数完成AES加密与解密流程,包括字节替换、行移位、列混淆及密钥加等步骤。解密过程为加密逆向操作,确保数据安全性与完整性。完整程序结合128位块加密与可选密钥长度,适用于图像信息安全场景。
|
2月前
|
机器学习/深度学习 数据采集 算法
matlab实现图像边缘检测及图像区域分割、目标检测、目标识别
matlab实现图像边缘检测及图像区域分割、目标检测、目标识别
|
3月前
|
算法 安全 数据安全/隐私保护
基于指纹图像的数据隐藏和提取matlab仿真
本内容介绍了一种基于指纹图像的数据隐藏算法,利用指纹的个体差异性和稳定性实现信息嵌入。完整程序运行无水印,基于Matlab2022a开发。指纹图像由脊线和谷线组成,其灰度特性及纹理复杂性为数据隐藏提供可能,但也受噪声影响。核心代码附详细中文注释与操作视频,适合研究数字版权保护、秘密通信等领域应用。
|
11月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
435 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
11月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
263 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
11月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
426 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)

热门文章

最新文章