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


相关文章
|
8月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
8月前
|
编解码 资源调度
MATLAB | 绘图配色第九期带高斯分布的直方图
MATLAB | 绘图配色第九期带高斯分布的直方图
92 0
|
7月前
|
算法
m基于PSO粒子群优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB2022a仿真实现了基于遗传优化的NMS LDPC译码算法,优化归一化参数以提升纠错性能。NMS算法通过迭代处理低密度校验码,而PSO算法用于寻找最佳归一化因子。程序包含粒子群优化的迭代过程,根据误码率评估性能并更新解码参数。最终,展示了迭代次数与优化过程的关系,并绘制了SNR与误码率曲线。
62 2
|
8月前
|
算法 异构计算
基于直方图的图像曝光量分析FPGA实现,包含tb测试文件和MATLAB辅助验证
该内容包括了算法的运行效果展示、软件版本信息、理论概述和核心程序代码。在正常图像中,`checkb`位于`f192b`和`f250b`之间,而多度曝光图像中`checkb`超出此范围,判断为曝光过度。使用的软件为Vivado 2019.2和MATLAB 2022a。理论依据未详细给出,但提及主要方法。提供的Verilog代码段用于处理图像数据,包括读取文件、时钟控制及图像histogram计算等,其中模块`im_hist`似乎是关键部分。
|
8月前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
92 1
|
8月前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
8月前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
8月前
|
算法 数据安全/隐私保护 数据格式
基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
该内容是一个关于混沌系统理论及其在图像加解密算法中的应用摘要。介绍了使用matlab2022a运行的算法,重点阐述了混沌系统的特性,如确定性、非线性、初值敏感性等,并以Logistic映射为例展示混沌序列生成。图像加解密流程包括预处理、混沌序列生成、数据混淆和扩散,以及密钥管理。提供了部分核心程序,涉及混沌序列用于图像像素的混淆和扩散过程,通过位操作实现加密。
|
8月前
|
算法 计算机视觉 异构计算
基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容包含了一段关于图像处理算法的摘要,主要包括: 1. 展示了MATLAB和FPGA的测试结果图像,显示了图像读取完成的标志和相似性指标,其中图1与图2有较强相似性,图1与图3相似性较弱。 2. 算法使用的是vivado 2019.2和matlab 2022A版本。 3. 算法原理涉及图像直方图统计和直方图相似性度量,通过计算直方图的差异来衡量图像相似度,FPGA实现包括图像采集、直方图计算、比较和分类决策步骤。 4. 提供了一个部分核心Verilog程序,用于读取图像数据并在FPGA上进行直方图相似性计算。
|
8月前
|
计算机视觉
数字图像处理笔记(一)Matlab实现直方图均衡化
数字图像处理笔记(一)Matlab实现直方图均衡化