实验二 图像增强方法编程与应用

article/2025/8/19 2:42:23

目录

一、实验目的

1. 理解常见图像增强方法的原理和特点;

2. 掌握常见的灰度线性和非线性变换方法;

3. 掌握直方图均衡增强的原理与应用方法;

4. 掌握模板卷积的概念、原理与实现方法

5. 掌握均值滤波的技术原理与实现方法;

6. 掌握中值滤波的技术原理与实现方法;

二、实验内容

1. 图像的灰度线性变换

2. 图像的灰度非线性变换

三、实验步骤

1. 图像的灰度线性变换

2. 图像的灰度非线性变换

3. 直方图均衡化方法的应用

4. 图像均值滤波方法的应用

5. 图像中值滤波方法的应用


实验工具:matlabR2021b

一、实验目的

1. 理解常见图像增强方法的原理和特点;

2. 掌握常见的灰度线性和非线性变换方法;

3. 掌握直方图均衡增强的原理与应用方法;

4. 掌握模板卷积的概念、原理与实现方法

5. 掌握均值滤波的技术原理与实现方法;

6. 掌握中值滤波的技术原理与实现方法;

二、实验内容

1. 图像的灰度线性变换

(1)给定2 幅图像(raising_moon.jpg 和 CTimag.png),要求通过线性变换方法实现

其对比度增强(如下图所示)。

 

2. 图像的灰度非线性变换

(1)给定1 幅图像(GThxh.png),要求通过对数变换实现其对比度增强(如下图)。

三、实验步骤

1. 图像的灰度线性变换

I=imread('raising_moon.jpg');
I1=double(I);% I 转换为I1 的目的是精度问题,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够
I2=I;
J=I1*255/60;%公式为:g(x,y)=[((255-0)/(60-0)]*f(x,y)+0
J2=I2*255/60;
K=uint8(J); % 增强后的图像数据
figure, subplot(321), imshow(I); title('原始图像(8 bits)');
subplot(322), imhist(I); title('原始图像直方图');% 发现像素灰度主要集中在[0 60]之间,是造成图像整体灰暗的原因
subplot(323), imshow(K); title('灰度线性增强图像');
subplot(324), imhist(K); title('增强图像直方图');
subplot(325), imshow(J2); title('没有double图像');
subplot(326), imhist(J2); title('没有double图像直方图');

    

   

【思考与练习】

① 在灰度变换算法编程时,为什么要进行图像数据类型的转换?如何转换?

答:因为灰度图像数据类型是无符号八位数据,如果直接进行计算,会导致数据丢失,达不到想要的效果。转换方法可以是:I1=double(I)

② 如果直接使用图像数据类型进行图像数据的算法处理会带来什么问题?

答:在这张图像中这样处理会导致处理后的图像直方图灰度集中在0附近,如“没有double图像直方图”所示。

③ 试采用 for 循环和直接使用矩阵运算两种编程方式,实现同一图像数据处理过程(譬如,上述的灰度增强处理)。

1.for 循环

t0=cputime;
I=imread('raising_moon.jpg');
figure,subplot(221),imshow(I),title('原图像');
[m,n]=size(I);
Io=zeros(m,n);
I1=double(I);
for i=1:m
for j=1:n
Io(i,j)=255*I1(i,j)/60;
end
end
K=uint8(Io);
subplot(222),imhist(I),title('原图像直方图');
subplot(222),imhist(I),title('原图像直方图');
subplot(223),imshow(K),title('for图像');
subplot(224),imhist(K),title('for图像直方图');
t1=cputime-t0

t1 = 0.8750

    

   

2.矩阵运算

t0=cputime;
I = imread('raising_moon.jpg');
I1 = double(I);
J = I1 * 255 / 60;
K = uint8(J);
figure, subplot(2, 2, 1), imshow(I), title('原始图像(8 bits)');
subplot(2, 2, 2), imhist(I), title('原始图像直方图');
subplot(2, 2, 3), imshow(K), title('灰度线性增强图像');
subplot(2, 2, 4), imhist(K), title('增强图像直方图');
t1=cputime-t0

t1 = 0.4375

   

④ 比较两种方式所耗时间有无差异,体会MATLAB 矩阵运算的优势和特点。

答:矩阵运算比使用for循环速度更快。使用矩阵运算时,Matlab 可以直接对整个图像矩阵进行运算,从而提高了计算效率,进而缩小运算时间。

⑤ 试采用相同的原理和编程方法,实现医学图像“CTimag.png”的灰度线性增强;并对

比显示增强前后的图像。

I = imread('CTimag.png');
I1 = double(I);
J = I1 * 255 / 4000;%J=I1 * 65536/ 4000;
%J=J/256;
K = uint8(J);
figure, subplot(2, 2, 1), imshow(I), title('原始图像(8 bits)');
subplot(2, 2, 2), imhist(I), title('原始图像直方图');
subplot(2, 2, 3), imshow(K), title('灰度线性增强图像');
subplot(2, 2, 4), imhist(K), title('增强图像直方图');

    

   

对比两图像,处理后的更易于观察。

2. 图像的灰度非线性变换

I=imread('GThxh.png');
A=rgb2gray(I); % 转化成灰度图像
figure,subplot(221),imshow(A),title('yuan');
subplot(222),imhist(A),title('yuan'); % 显示图像直方图
f=1:255; % 设置变换区间
a=50,b=0.03,c=2.5; % 设置变换系数
g=a+log(f+1)/(b*log(c)); % 计算对数变换
B=a+log(double(A)+1)/(b*log(c)); % 为什么要将A 转换成double 类型
C=uint8(B);
subplot(223),imshow(C),title('log'); % 显示图像A 的非线性增强效果
subplot(224),imhist(C),title('log'); % 绘制增强后的直方图
figure,plot(f,g); % 绘制变换曲线

   

   

【思考与练习】

① 图像A 的数据类型是什么?在做对数变换时,为什么要将A 转换成double 类型?

答:无符号8位。因为不转换成double类型会数据溢出。

② 参照上述线性变换的第(4)步,在同一个图形窗口中对比展示图像A 的非线性增强效果。

答:如上所示,经过非线性增强后能看见图像暗处有人等细节。

③ 根据图像增强的效果,试分析图像对数变换处理的优势和问题。

答:

一、优势:处理后,直方图分布更均匀,图像更利于人眼观察;增强了低灰度区域的细节,压缩高灰度区域对比度。

二、问题:处理过程复杂,需要确定参数(abc)合适的值,才能达到想要的效果;易受噪声影响,对数变换容易受到图像噪声的影响,因为它会放大低灰度像素的细节,而这些低灰度像素往往是噪声所在的区域;计算机计算量较大。

④ 根据图像增强理论和方法,是否能够对给定的“和谐号”图像做到“低展”+“高平”处理?

——即对较低灰度范围内的像素值进行“扩展或拉伸”,而对灰度较高范围内的像素值保持

不变,以消除对数变换处理的负作用。

答:可以的。可以使用幂运算,近乎低灰度拉伸,高灰度保持。也可以使用for加if对图像进行处理。

⑤ 如果可以,请给出相应的算法,并编程测试。

G=imread('GThxh.png');%读取图像
G1=im2double(G);
G2=G1.^(0.6);
figure,subplot(221),imshow(G1);title('原图像');
subplot(222),imshow(G2);title('0.75 图像');
subplot(223),imhist(G1);title('原图像直方图');
subplot(224),imhist(G2);title('0.75 图像直方图');

   

3. 直方图均衡化方法的应用

T=imread('tire.tif');
H=histeq(T);
imwrite(H,'tire_HE.tif');
figure, subplot(221),imshow(T),title('原始图像')
subplot(222),imhist(T),title('原始图像直方图');
subplot(223),imshow(H),title('直方图均衡处理后的图像');
subplot(224),imhist(H),title('均衡图像直方图');

   

【思考与练习】

① 图像直方图均衡化的原理是什么?

答:通过累积分布函数变成近似均匀分布,增强图像的对比度。

② 直方图均衡化的变换函数是什么?

答:累积分布函数。

③ 直方图均衡化算法的实现步骤有哪些?

答:

1依次扫描原始灰度图像的每一个像素, 计算出图像的灰度直方图。

2计算灰度直方图的累积分布函数。

3根据累积分布函数和直方图均衡化原理得到输入与输出之间的映射关系。

4最后根据映射关系得到结果进行图像变换.

④ 试编写一个直方图均衡化程序,并测试分析。

答:

E=imread('GThxh.png');
F=histeq(E);
figure, subplot(221),imshow(E),title('原始图像');
subplot(222),imhist(E),title('原始图像直方图');
subplot(223),imshow(F),title('处理后的图像');
subplot(224),imhist(F),title('处理后的图像直方图');

   

4. 图像均值滤波方法的应用

I=imread('coins.png');
Ig=imnoise(I,'gaussian',0.1,0.004); % 给图像加入均值为0.1、方差为0.004 的高斯噪声
figure, subplot(121),imshow(I); title('原始图像');
subplot(122),imshow(Ig);title('加噪图像');

   

h=ones(3,3)/9; % 设置平滑模板(卷积核)
Is=imfilter(Ig,h); % 平滑滤波运算
imwrite(Is, 'coins_smt.jpg'); % 平滑滤波后图像的输出保存
figure, subplot(131),imshow(I);title('原图像');
subplot(132),imshow(Ig),title('含高斯噪声的图像');
subplot(133),imshow(Is),title('平滑滤波后的图像');

   

【思考与练习】

① 图像均值平滑滤波的原理是什么?

答:其基本原理是图像像素点的值处理为邻域内其他像素点的均值。

② 写出上述滤波程序所采用的卷积算法公式。

答:卷积运算就是对于图像f(x,y) 中的每个像素,将其作为中心像素,计算它及其邻域像素和kernel

核w(a,b)对应位置元素的乘积,然后把结果相加到一起,得到的值就作为该中心像素的新值,这样就

完成了一次卷积运算。然后将kernel 向下或向左平移一位继续计算每个像素的新值,直到遍历完整个

图像。

③ 通过帮助系统,了解 imnoise( ) 和 imfilter() 函数的详细用法。

答:

J = imnoise(I,'gaussian') 将方差为 0.01 的零均值高斯白噪声添加到灰度图像 I。

J = imnoise(I,'gaussian',m) 添加高斯白噪声,均值为 m,方差为 0.01。

B = imfilter(A,h) 使用多维滤波器 h 对多维数组 A 进行滤波,并在 B 中返回结果。

B = imfilter(A,h,options,...) 根据一个或多个指定的选项执行多维滤波

5. 图像中值滤波方法的应用

I=imread('eight.tif');
J=imnoise(I,'salt & pepper',0.03); % 给原始图像加入椒盐噪声(黑白点概率均为0.03)
figure, subplot(121),imshow(I); title('原始图像');
subplot(122),imshow(J);title('加噪图像');

   

K=medfilt2(J); % 中值滤波
imwrite(K, 'eight_smt.jpg'); % 滤波图像保存
figure,subplot(131),imshow(I);title('原图像');
subplot(132), imshow(J), title('椒盐噪声加入原图像');
subplot(133), imshow(K), title('中值滤波后的图像')

   

【思考与练习】

① 中值滤波的原理是什么?在图像处理中的作用有哪些?

答:中值滤波的原理是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。作用是把数字图像中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。

② 本次中值滤波的模板大小是多少?图像边界像素的处理方式是什么?

答:3*3,在图像四周各补充1 个像素的边缘。

③ 对比分析中值滤波与均值滤波的优缺点。

答:均值滤波相当于低通滤波,有将图像模糊化的趋势,对椒盐噪声基本无能为力。中值滤波的优点是可以很好的过滤掉椒盐噪声,缺点是易造成图像的不连续性。

小结:注意 for if 的使用,每使用一次 for if 都要在后面跟一个end


http://chatgpt.dhexx.cn/article/ltlxZg2y.shtml

相关文章

PyTorch:tensor、torch.nn、autograd、loss等神经网络学习手册(持续更新)

PyTorch1:tensor2、torch.nn、autograd、loss等神经网络学习手册(持续更新) 链接:画图、读写图片 文章目录 一、tensor二、完整训练过程:数据、模型、可学习参数、保存与加载1、数据dataa、构建网络-数据b、补充知识&…

Android编译libjpeg-turbo so高效压缩图片

https://www.jianshu.com/p/8ebe0ddd21f7 https://www.jianshu.com/p/f305fb008ab6 一 . 图片的基本知识 图像是由像素组成的,而像素实际上是带着坐标的位置和颜色信息的。它是有若干行和若干列的点组成的,他们相交就会有无数个点。假如我们随便取出一个…

(数字图像处理MATLAB+Python)第二章数字图像处理基础-第三、四节:数字图像的生成和数值描述

文章目录 一:数字图像的生成与表示(1)图像信号的数字化(2)数字图像类型 二:数字图像的数值描述(1)常用坐标系(2)数字图像的数据结构(3&#xff09…

MATLAB GUI设计 图像处理基本操作(二)

一、直方图及直方图均衡化 直方图是从图像灰度图中提取的亮度信息,包含灰度级和像素数,对于uint8图像其灰度级为0~255(2^8256),用imhist()函数显示。imhist()/numel可获…

ff

文章目录 1.变数与变量存档1.1变量类型转换1.1.1语法说明1.1.2单一字元1.1.3多元字元1.1.3.1说明1.1.3.2创建对象1.1.3.3逻辑运算和分配 1.2结构体1.2.1存储异构数据的方法1.2.2向结构添加信息2.2.2.1延伸拓展 1.3结构功能1.3.1功能基础语法1.3.2功能语法举例 1.4嵌套结构1.5元…

数字图像处理学习笔记 四 傅里叶变换和频率域滤波

目录 一 预备知识:傅里叶级数的介绍 1、一维傅里叶变换数学推导 2、图像傅里叶变换的物理意义 3、二维傅里叶变换 二、频率域滤波 1、频率域与空间域之间的关系 2、频率域滤波的基本步骤 3、使用频率域滤波平滑图像 4、使用频率域滤波锐化图像 5、选择率滤波…

第五章 DirectX 光照,材质和纹理(下)

在计算机三维世界中,想要模拟出真实的物体,让它的表面看起来更加逼真,就需要使用“纹理映射”技术,简单讲就是一种将2D图像映射到3D物体上面。一般来说,纹理是表示物体表面细节的一幅或多幅2D图像,也称为纹…

数组属性和基本操作

数组属性和基本操作 np.arange(start150,stop0,step-1) 将值倒过来 import numpy as np #matplotlib画图的,也可以读取图片 import matplotlib.pyplot as plt np.arange(150, 1, step-1) 输出 array([150, 149, 148, 147, 146, 145, 144, 143, 142, 141, 140, 1…

灰度增强和去噪

futurehello博客 http://blog.csdn.net/xixi_0921/article/details/50533487 整理笔记 一、前言 图像的灰度变换则不同,其对像素的计算仅仅依赖于当前像素和灰度变换函数。 灰度变换也被称为图像的点运算(只针对图像的某一像素点)是所有图…

Chapter_06 更改图像的对比度和亮度

文章目录 一. 本章目标① 目标② 理论③ 代码 二. 实例① 亮度和对比度调整② 伽马校正③ 纠正曝光不足的图像 三. 图形渲染中的伽马校正(附加资源) 一. 本章目标 ① 目标 本教程中我们将学习如何: 访问像素值用零初始化矩阵学习cv::saturate_cast是做什么的,以及它有什么用获…

MATLAB和Intislim,matlab灰阶变换函数imadjust和stretchlim的c++实现

灰阶变换 首先介绍一下灰阶变换,一幅图像数据本身在存储的数据结构上为一个二维的矩阵,即一幅图像为m*n个密密麻麻的像素点构成。 image.png 然后,这些像素点有着一个值,这个值成为灰度值或者亮度值,值的范围为[0,255]…

一个app开发周期是多久?快速开发才是主流

app的出现,极大的方便了人们的生活、社交和工作,各种各样的app为人们提供了各种便利的服务,真正让移动互联网服务大众。许多行业看到在app上爆发出的巨大潜能,都纷纷主动进行app制作来迎接移动互联网浪潮。 开发app一个很重的问题…

如何开发app软件?程序员揭秘你还没听过的1种方法

如何开发app软件?app软件开发需要多少钱?现在手机app这么火,很多企业都想开发一个app软件开拓市场。但是在开发app的时候往往会感觉力不从心,因为app开发门槛比较高,大家对app软件开发需要的技术、成本并不了解。 现…

商城APP软件开发要素有哪些

商城APP软件体系是当今电商行业经常会运用的商城体系,既支撑企业对企业的运营形式,也支撑卖家对消费者的运营形式,便是现在常见的B2C,B2B的电商形式APP,跟着现在的互联网的遍及现在这些电商都是成为了电商商家开展的不…

app软件怎么开发 盘点3种app制作方式

现在智能手机给大家的生活带来了很多便利,利用手机,随时随地看新闻、手机打车提前预定、网上订餐不用等、商家服务提前预约、学习内容随时看、购物更是随时买。各式各样的手机App,让生活方式方式了重大改变。 1、组建团队开发APP 自己有团队…

app应用软件开发流程是怎样的?

从入职这行业到创业已有 7 载,对 APP 产品开发的流程已经再熟悉不过了,现在把这几年积累的一些经验和大家分享一下,一个产品是怎么从想法一步一步落地为具体成品的,这个过程中会经历一些怎样的必要流程呢,下面大致说一…

三阶魔方傻瓜指南

三阶魔方20分钟完全自救指南——包学包会 前言 寒假宅在家里,闲来无事,偶得一个三阶魔方,便从网上找公式摸索。发现了很多版本,但是大多局部最优,缺少易于小白理解的全局最优方法。所以做次总结,集各家所…

C/C++FPS实战CSGO矩阵方框透视骨骼自瞄实战教程

C/CFPS实战CSGO矩阵方框透视骨骼自瞄实战教程

基于yolo5制作的csgo,ai自瞄

研究了几天,终于肝出来了,基本功能完美运行,晚点在训练一个专用模型。

警惕AI,我搭建了一个“枪枪爆头”的视觉AI自瞄程序,却引发了一场“山雨欲来”

前言 前段时间在网上看到《警惕AI外挂!我写了一个枪枪爆头的视觉AI,又亲手“杀死”了它》 这个视频,引起了我极大的兴趣。 视频中提到,在国外有人给使命召唤做了个AI程序来实现自动瞄准功能。它跟传统外挂不一样,该程…