Matlab数字图像处理 实验2、图像灰度变换的计算机实现

图 像 灰 度 变 换 的 计 算 机 实 现 图像灰度变换的计算机实现

灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。

P a r t . 0 实 验 目 的 仅 限 于 学 习 交 流 Part.0 实验目的^{仅限于学习交流} Part.0

  1. 熟悉图像灰度变换的理论;
  2. 掌握空域法进行数字图像灰度变换的原理;
  3. 学习VC++ 6.0/matlab的编程方法;
  4. 验证直方图均衡化处理理论;

P a r t . 1 实 验 内 容 仅 限 于 学 习 交 流 Part.1 实验内容^{仅限于学习交流} Part.1

  1. 掌握高级语言编程技术;
  2. 选取相同尺寸、 不同质量的多幅图像(至少两幅)利用变换函数(可根据情况采用指数函数、 对数或线性函数等)和直方图均衡化方法进行灰度变换;
  3. 分析处理结果。

P a r t . 2 实 验 源 代 码 仅 限 于 学 习 交 流 Part.2 实验源代码^{仅限于学习交流} Part.2

*代码调试不易。转载请标明出处,谢谢!

% 日期 20201218% 主题 实验二:图像灰度变换
% 要求 
%       1)掌握高级语言编程技术;
%       2)选取相同尺寸、不同质量的多幅图像(至少两幅)
%          利用变换函数(可据情况采用指数函数、对数或线性函数等)和
%          直方图均衡化方法进行灰度变换;
%       3)分析处理结果。

% Matlab相关语句语法:
% J = imadjust(I);         % 调整图像强度值或颜色映射
% J = imadjust(I,[low_in; high_in],[low_out; high_out]);
% J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma);
% 
% IM2 = imcomplement(IM);  % 补码图像
% % 如果im是double类的灰度或rgb图像,则可以使用表达式1-im代替此函数。
% % 如果im是二进制图像,则可以使用表达式~im代替此函数。
% 
% I2 = im2uint8(I);  % 将图像转换为8位无符号整数
% 
% % 将矩阵转换为灰度图像
% I = mat2gray(A, [amin amax]);  
% % amin和amax是a中与i中的0.01.0相对应的值。
% % 小于amin的值变为0.0,大于amax的值变为1.0% I = mat2gray(A);  
% % 将amin和amax的值设置为a中的最小值和最大值。

clear;clc;close all

%% NO.1 小男孩
T = imread('pout.tif');
try
    T=rgb2gray(T);    % 如果是RGB图像,转成灰度图
catch
    % 否则,不做变换
end
T_imadjust = imadjust(T);
% imadjust通过将输入强度图像的值映射到新值来增加图像的对比度,
% 默认情况下,1%的数据在输入数据的低强度和高强度下饱和。
% T_imadjust1 = imadjust(T,[0 1],[0.5 0.75]);   % 调整图像颜色映射 = Black-white
% T_imadjust2 = imadjust(T,[0; 1],[0.5; 1],5);  % 调整图像强度值或颜色映射
T_imadjust3 = imcomplement(T);  % 补码图像
T_imadjust4 = im2uint8(mat2gray(log(1+double(T)))); % 灰度对数变换
T_histeq = histeq(T);
% histeq执行直方图均衡化。它通过变换亮度图像中的值来增强图像的对比度,
% 使输出图像的直方图与指定的直方图近似匹配(默认为均匀分布)。
% T_adapthisteq = adapthisteq(T);
% AdapterHisEQ执行对比度受限的自适应直方图均衡化。
% 与histeq不同,它对小数据区域(tiles)而不是整个图像进行操作。
% 每个直方图的均匀分布与每个直方图的对比度大致匹配。为了避免放大图像中可能存在的噪声,可以限制对比度增强。
figure,set(gcf,'outerposition',get(0,'screensize')); % figure窗口最大化
subplot(3,4,1),imshow(T),title('[原始图像]');  
subplot(3,4,2),imhist(T),title('[对应直方图]');
subplot(3,4,5),imshow(T_imadjust3),title('[补码图像]');  
subplot(3,4,6),imhist(T_imadjust3),title('[对应直方图]');
subplot(3,4,9),imshow(T_imadjust),title('[线性灰度变换]');  
subplot(3,4,10),imhist(T_imadjust),title('[对应直方图]');

subplot(3,4,3),imshow(T),title('[原始图像]');  
subplot(3,4,4),imhist(T),title('[对应直方图]');
subplot(3,4,7),imshow(T_imadjust4),title('[对数灰度变换]');  
subplot(3,4,8),imhist(T_imadjust4),title('[对应直方图]');
subplot(3,4,11),imshow(T_histeq),title('[直方图均衡化]');  
subplot(3,4,12),imhist(T_histeq),title('[对应直方图]');

%% NO.2 轮胎
T = imread('tire.tif');
try
    T=rgb2gray(T);    % 如果是RGB图像,转成灰度图
catch
    % 否则,不做变换
end
T_imadjust = imadjust(T); % 线性灰度变换
T_imadjust3 = imcomplement(T);  % 补码图像
T_imadjust4 = im2uint8(mat2gray(log(1+double(T)))); % 对数变换
T_histeq = histeq(T); % histeq执行直方图均衡化

figure,set(gcf,'outerposition',get(0,'screensize')); % figure窗口最大化
subplot(3,4,1),imshow(T),title('[原始图像]');  
subplot(3,4,2),imhist(T),title('[对应直方图]');
subplot(3,4,5),imshow(T_imadjust3),title('[补码图像]');  
subplot(3,4,6),imhist(T_imadjust3),title('[对应直方图]');
subplot(3,4,9),imshow(T_imadjust),title('[线性灰度变换]');  
subplot(3,4,10),imhist(T_imadjust),title('[对应直方图]');

subplot(3,4,3),imshow(T),title('[原始图像]');  
subplot(3,4,4),imhist(T),title('[对应直方图]');
subplot(3,4,7),imshow(T_imadjust4),title('[对数灰度变换]');  
subplot(3,4,8),imhist(T_imadjust4),title('[对应直方图]');
subplot(3,4,11),imshow(T_histeq),title('[直方图均衡化]');  
subplot(3,4,12),imhist(T_histeq),title('[对应直方图]');

%% NO.3 
I = imread('car_3.jpg');
try
    T=rgb2gray(I);    % 如果是RGB图像,转成灰度图
catch
    T = I; % 否则,不做变换
end
T_imadjust = imadjust(T); % 线性灰度变换
T_imadjust3 = imcomplement(T);  % 补码图像
T_imadjust4 = im2uint8(mat2gray(log(1+double(T)))); % 对数变换
T_histeq = histeq(T); % histeq执行直方图均衡化

figure,set(gcf,'outerposition',get(0,'screensize')); % figure窗口最大化
subplot(3,4,1),imshow(T),title('[原始图像]');  
subplot(3,4,2),imhist(T),title('[对应直方图]');
subplot(3,4,5),imshow(T_imadjust3),title('[补码图像]');  
subplot(3,4,6),imhist(T_imadjust3),title('[对应直方图]');
subplot(3,4,9),imshow(T_imadjust),title('[线性灰度变换]');  
subplot(3,4,10),imhist(T_imadjust),title('[对应直方图]');

subplot(3,4,3),imshow(T),title('[原始图像]');  
subplot(3,4,4),imhist(T),title('[对应直方图]');
subplot(3,4,7),imshow(T_imadjust4),title('[对数灰度变换]');  
subplot(3,4,8),imhist(T_imadjust4),title('[对应直方图]');
subplot(3,4,11),imshow(T_histeq),title('[直方图均衡化]');  
subplot(3,4,12),imhist(T_histeq),title('[对应直方图]');



P a r t . 3 实 验 结 果 及 分 析 仅 限 于 学 习 交 流 Part.3 实验结果及分析^{仅限于学习交流} Part.3

由于噪声、光照等外界环境或设备本身的原因,通常我们所获取的原始数字图像质量不是很高,因此在对图像进行后续分析处理之前,一般都需要对原始数字图像进行增强处理。通过图像灰度变换,一方面可以改善图像的视觉效果,另一方面也能突出图像的特征,便于计算机更有效地对图像进行识别和分析。图像增强按所用方法可分成频率域法和空间域法。前者把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。具有代表性的空间域算法有局部求平均值法和中值滤波(取局部邻域中的中间像素值)法等,它们可用于去除或减弱噪声。
基于空域的算法分为点运算算法和邻域去噪算法。点运算算法即灰度级校正、灰度变换和直方图修正等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。邻域增强算法分为图像平滑和锐化两种。平滑一般用于消除图像噪声,但是也容易引起边缘的模糊。常用算法有均值滤波、中值滤波。锐化的目的在于突出物体的边缘轮廓,便于目标识别。常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等。
亮度的最大值与最小值之比称为对比度,通过提高图像的视觉效果可以达到增强图像的目的。有些图像的对比度很差,例如X光照片或卫星多光谱图像。因此,需要对图像中的每一个像素的灰度进行灰度标尺变化,扩大图像的灰度范围,达到增强的目的。这是对图像视觉效果改善行之有效且相对简单的方法。实验二在Windows操作系统下的MATLAB2019b应用程序中编写程序,待程序调试完成后,通过选取相同尺寸、不同质量的三幅图像分别利用变换函数(线性函数、对数函数)和直方图均衡化方法进行灰度变换来探究基于灰度变换的图像增强效果及其相应的直方图变换情况。程序运行结果如下图所示:

图1-1 “boy”图像的灰度变换及其直方图均衡化

图1-1 “boy”图像的灰度变换及其直方图均衡化

图1-2 “轮胎”图像的灰度变换及其直方图均衡化

图1-2 “轮胎”图像的灰度变换及其直方图均衡化

图1-3 “车库”图像的灰度变换及其直方图均衡化

图1-3 “车库”图像的灰度变换及其直方图均衡化

当图像由于成像时曝光不足或过度,由于成像设备的非线性或图像记录设备动态范围太窄等因素,都会产生对比度不足从而使图像中的细节分辨不清。这时如将图像灰度线性变换、对数缩放或直方图均衡化,常能显著改善图像的主观质量。图2-1中原始图像灰度范围太窄,通过灰度等级调整使得图像的视觉效果更佳,更清晰。图2-2、2-3中图像灰度失衡,通过调整后图像的细节更加突显。视觉效果好了很多, 更适合人的视觉特性。
因此图像灰度变换是通过对原图像素值重新分配实现,目的是使图像中表现较暗(或较亮)的像素值,通过灰度变换函数映射的方法使较暗(或较亮)的像素值增大(减小),这样图像的对比度就提高了细节等特征更加突显。由以上三幅图像可以看出:图像灰度变换函数(线性函数、对数函数)和直方图均衡化等方法的处理结果并非总是令人满意,只有对特定图像尝试不同方法才能得到最佳处理效果;此外图像灰度变换处理并不能使原始图像信息增加,其结果只能增强对某种信息的辨别能力,相反这种处理有可能损失一些其他信息。

P a r t . 4 友 情 链 接 所 需 相 关 资 源 可 留 言 反 馈 获 取 Part.4 友情链接^{所需相关资源可留言反馈获取} Part.4

  1. MATLAB学习索引
  2. GraphPad Prism绘图分析学习记录

*代码调试不易。转载请标明出处,谢谢!
如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作分享的最大动力,谢谢!

References
[1]阮秋琦.数字图像处理学[M].北京:电子工业出版社, 2001.
[2]医学影像处理与分析[M]. 电子工业出版社 , 田捷等编著, 2003
[3]基于MATLAB的系统分析与设计[M]. 西安电子科技大学出版社 , 王晓丹,吴崇明编著, 2000
[4]朱秀昌, 刘峰, 胡栋.数字图像处理与图像通信[M].北京:北京邮电大学出版社, 2002.
[5]贾永红.计算机图像处理与分析[M].武昌:武汉大学出版社, 2001.
[6]何斌, 马天予, 王运坚, 等.Visual c++数字图像处理[M].北京:人民邮电出版社, 2002.
[7]Venkatesan Rajinikanth,E Priya,Hong Lin,Fuhua Lin. Hybrid Image Processing Methods for Medical Image Examination[M].CRC Press:2020-12-17.
[8]Ranjan Parekh. Fundamentals of Image, Audio, and Video Processing Using MATLAB®:With Applications to Pattern Recognition[M].CRC Press:2020-12-17.
[9]Comparison of Edge Detector Performance through Use in an Object Recognition Task[J] . Min C Shin,Dmitry B Goldgof,Kevin W Bowyer. Computer Vision and Image Understanding . 2001 (1)
[10]A novel zero-crossing edge detectionmethod based on multi-scale space theory. Mengmeng Zhang,Xia Li,Zhihui Yang,Yang Yan g. M Signal Processing (ICS P),2010IEEE10th International Conference . 2010
[11]医学图像分割算法研究及其在骨分割中的应用[D]. 黄琴波.西安电子科技大学 2011
[12]刘付桂兰.基于MATLAB图像处理技术及应用[J].科学技术创新,2020(35):64-67.
[13]一阶边缘检测算法的研究[J]. 朱振伟,刘广瑞,刘巧红. 现代电子技术. 2009(24)
[14]孙道辉.基于信息融合的图像边缘检测算法实现[J].电子测试,2018(13):53-54.
[15]李晶晶,王迪,常玲. 基于图像边缘检测算法的应用研究与实现[A]. 中共沈阳市委、沈阳市人民政府、中国农学会.第十三届沈阳科学学术年会论文集(理工农医)[C].中共沈阳市委、沈阳市人民政府、中国农学会:沈阳市科学技术协会,2016:5.
[16]张慧,冯驰.图像边缘检测算法研究及其MATLAB实现[J].佳木斯职业学院学报,2015(09):330.

*可以肯定的是学海无涯,这篇文章也会随着对MATLAB的深入学习而持续更新,
欢迎各位在评论区留言进行探讨交流。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值