一、实验目的
1.了解和掌握图像增强的方法。
2.掌握MATLAB中的图像的代数和几何运算函数的使用方法。
3.掌握MATLAB中的图像的增强函数的使用方法。
4.掌握MATLAB中的图像的滤波函数的使用方法。
5.用MATLAB函数和编程实现图像的几何变换、灰度变换和直方图变换,分析和比较不同系数、不同函数情况下的图像增强效果。
二、实验要求
1.实验课前需要写预习实验报告,内容为本次实验要求中的所有程序清单。
2.实验课对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。
3.实验课后写出实验报告。报告要求有实验目的,实验内容与步骤,调试完成的准确编程代码,实验小结,回答问题。
三、实验内容(每一个内容编写一个*.m文件)
1.将索引图像‘woman.mat’调整大小。
(1)增大3倍;
(2)减少1/2;
(3) 调整大小为〔20 80〕。
要求分别用3种不同的插补方法。
代码:
clc,
clear
load woman.mat;
figure;
imshow(X,map);
figure;
X1 = imresize(X,3,'bilinear');
imshow(X1,map)
title('双线性插补法')
figure;
X2 = imresize(X,0.5,'nearest');
imshow(X2,map)
title('最近邻法插补')
figure;
X3 = imresize(X,[20,80],'bicubic');
imshow(X3,map)
title('双立方插补')
2. 将索引图像‘woman.mat’进行旋转。
(1)顺时针旋转30°;
(2)逆时针旋转60°;
(3)逆时针旋转90°;
(4)用参数‘crop’逆时针旋转60°。
要求分别用3种不同的插补方法。
代码:
clc,
clear
load woman.mat;
subplot(2,3,1)
imshow(X,map);
title("原图像")
subplot(2,3,2)
I = imrotate(X,-30,'bilinear');
imshow(I,map);
title("顺时针旋转30°");
subplot(2,3,3)
I1 = imrotate(X,60,'bicubic');
imshow(I1,map);
title("逆时针旋转60°")
subplot(2,3,4)
I2 = imrotate(X,90,'nearest');
imshow(I2,map);
title("逆时针旋转90°")
subplot(2,3,5)
I3 = imrotate(X,60,'crop');
imshow(I3,map);
title("用参数‘crop’逆时针旋转60°")
3.将索引图像chess.mat进行剪切 。
(1)交互式剪切,剪切象棋马头部分;
(2)非交互式剪切,剪切范围为[30 60 40 100]。
代码:
clc,
clear
load chess.mat
figure;
imshow(X,map);
title('原图像')
imcrop;
figure;
X2 = imcrop(X,map,[30 60 40 100]);
imshow(X2,map);
title('原图剪切块(30 60 40 100)')
4.利用Maltlab直接灰度变换法的函数对图像medicine_pic.jpg进行灰度变换:
(1)使用函数imadjust(参数gamma分别取0.4,1和2时)在一个figure图像窗口中显示输入图像(medicine_pic.jpg);体会gammar参数取不同值时的使用效果并用文字说明;
(2)使用函数imadjust得到输入图像(medicine_pic.jpg)的负片图像。
代码:
clc,
clear
I = imread("medicine_pic.jpg");
subplot(2,2,1);
imshow(I)
subplot(2,2,2);
I1 = imadjust(I,[],[],0.4);
imshow(I1)
subplot(2,2,3);
I2 = imadjust(I,[],[],1);
imshow(I2)
subplot(2,2,4);
I3 = imadjust(I,[],[],2);
imshow(I3)
g0 = imadjust(I,[0,1],[1,0],1);
figure,imshow(g0);title('负片图像');
g = imcomplement(I);
figure,imshow(g);title('等效的负片图像');
5.根据灰度变换原理编写MATLAB代码,对图像实现如下灰度变换:
(1)对输入图像(pollen.jpg)实现线性变换,pollen = pollen×A+B,其中,及,观察两种情况下图像灰度变换并分析,选择一个合适的变换参数,使得图像质量得到提高,并分析原因;
(2)对输入图像(point.jpg)进行对数变换,point = log(1 + point),并分析变换前后图像的变化和数据的变化;
(3)对输入图像(point.jpg)进行幂指数变换,point = point ^0.2,并分析变换前后图像的变化和数据的变化。
代码:
clear
figure(1)
I = imread('pollen.jpg');
subplot(2,3,1),imshow(I),title('原图1')
imgI = double(I);
imgI1 =(imgI * 0.5 + 50)/255;
subplot(2,3,4),imshow(imgI1),title('A = 0.5,B = 50')
imgI2 =(imgI * 1.5 + 50)/255;
subplot(2,3,5),imshow(imgI2),title('A = 1.5,B = 50')
imgI3 =(imgI * 2 + 20)/255;
subplot(2,3,6),imshow(imgI3),title('A = 2,B = 20')
figure(2)
J = imread('point.jpg');
subplot(3,2,1),imshow(J),title('原图2')
imgJ = double(J);
K1= log(1 +imgJ);
K2=mat2gray(log(1 +imgJ));
subplot(3,2,3),imshow(K1);title('对数运算')
subplot(3,2,4),imshow(K2);title('对数运算后归一化')
L1=imgJ.^2;
L2=mat2gray(imgJ.^0.2);
subplot(3,2,5),imshow(L1);title('幂次运算')
subplot(3,2,6),imshow(L2);title('幂次运算后归一化')
6. 计算并绘制图像(pollen.jpg)直方图,显示结果图上方加标题,体会不同方法的显示效果(横坐标范围0-255步长50,纵坐标范围0-300000步长30000):
(1)使用函数imhist绘制图像直方图(参数选择:25);
(2)使用函数bar绘制图像直方图(参数选择:horz=linspace(0,255,25));
(3)使用函数stem绘制图像直方图(参数选择:horz=linspace(0,255,25);’fill’);
(4)使用函数plot绘制图像直方图(参数选择:default);
代码:
clear
clc
I = imread("pollen.jpg");
figure;
imshow(I);
figure;
imhist(I,25);
axis([0 255 0 300000])
set(gca,'xtick',0:30:255)
set(gca,'ytick',0:50000:300000)
title('使用函数imhist绘制图像直方图')
figure;
h = imhist(I,25);
horz=linspace(0,255,25);
bar(horz,h,0.3);
axis([0 255 0 300000])
set(gca,'xtick',0:20:255)
set(gca,'ytick',0:40000:300000)
title('使用函数bar绘制图像直方图')
figure;
stem(horz,h,'fill')
axis([0 255 0 300000])
set(gca,'xtick',0:30:255)
title('使用函数stem绘制图像直方图')
figure;
plot(h);
title('使用函数plot绘制图像直方图')
7.利用Maltlab中的图像增强函数,对一给定灰度图像‘cameraman.tif’进行增强处理,要求依次进行以下操作:添加椒盐噪声、中值滤波、图像增亮、增加对比度、直方图均衡化 ,得到增强后的图像,要求每次处理后显示图像的直方图,并分析比较直方图。
代码:
clc,
clear
I = imread('cameraman.tif');
subplot(3,3,1);
J1 = imnoise(I,'salt & pepper');
imshow(J1);
title("椒盐噪声")
subplot(3,3,2);
imhist(J1);
subplot(3,3,3);
J2 = medfilt2(J1);
imshow(J2);
title("添加中值滤波")
subplot(3,3,4);
imhist(J2);
subplot(3,3,5)
J3 = imadjust(I,[],[0.5 1]);
imshow(J3);
title("灰度变换")
subplot(3,3,6)
imhist(J3);
subplot(3,3,7)
J4 = imadjust(J3,[0.35 0.55],[]);
imshow(J4);
title("图像增亮")
subplot(3,3,8)
imhist(J4);
subplot(3,3,9)
J5 = histeq(J4);
imshow(J5);
title("直方图均衡化")
8.利用Maltlab中的图像增强函数,对一给定灰度图像‘eight.tif’进行局部增强处理,要求依次进行以下操作:灰度求反、图像变暗、降低对比度,得到增强图像1,对增强图像1选择明暗交界处的一部分进行滤波,得到局部增强图像2。
代码:
clear;
I=imread('eight.tif');
figure,
subplot(2,2,1);
imshow(I)
subplot(2,2,2);
J1=imadjust(I,[0 1],[1 0]);
imshow(J1)
title(" 灰度反转")
subplot(2,2,3);
J2=imadjust(J1,[],[0 0.8]);
imshow(J2)
title(" 图像变暗")
subplot(2,2,4);
J3=imadjust(J2,[],[0.3 0.7]);
imshow(J3)
title("降低对比度")
figure,
J4=roipoly(J3);
subplot(1,2,1);
imshow(J4)
J5=fspecial('average',9);
J6=roifilt2(J5,J3,J4);
subplot(1,2,2);
imshow(J6)
9.根据直方图均衡原理编写MATLAB代码,对图像pollen.jpg实现直方图均衡化处理,与直接使用函数histeq()的结果进行比较并做出文字说明。
a= imread('pollen.jpg');
I=a;
[height,width] = size(I);
figure
subplot(3,2,1)
imshow(I)%显示原图像
subplot(3,2,2)
imhist(I)%显示原图像直方图
%进行像素灰度统计;
n = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
for j = 1: width
n(I(i,j) + 1) = n(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
p = zeros(1,256);
for i = 1:256
p(i) = n(i) / (height * width * 1.0);
end
%计算累计直方图分布
c = zeros(1,256);
for i = 1:256
if i == 1
c(i) = p(i);
else
c(i) = c(i - 1) + p(i);
end
end
%累计分布取整
c = uint8(255 .* c + 0.5);
%对灰度值进行映射(均衡化)
for i = 1:height
for j = 1: width
I(i,j) = c(I(i,j));
end
end
subplot(3,2,3)
imshow(I)%显示直方图均衡化图像
subplot(3,2,4)
imhist(I)%显示直方图均衡化图像直方图
b=histeq(a);%调用直方图均衡化histeq()函数%进行比较
subplot(3,2,5)
subimage(b);
subplot(3,2,6)
imhist(b);
四、问题与讨论
1.图像灰度变换有哪些类型?
负片
扩展区间与伽马灰度变换
自动选取灰度级的灰度变换
对数变换
直方图均衡化
- 直方图是什么概念?它反映了图像的什么信息?
在 MATLAB 中,直方图是指对图像中像素值的统计分布。它以图像的像素值为横轴,像素值在图像中的出现次数(或频率)为纵轴,用柱状图的形式表示。直方图可以帮助我们了解图像的亮度分布、对比度、颜色分布等信息。
直方图反映了图像的以下信息:
亮度分布:直方图的形状可以展示图像中亮度的分布情况。例如,如果直方图的峰值集中在较高的亮度值上,表示图像整体较亮;如果峰值集中在较低的亮度值上,表示图像整体较暗。
对比度:直方图的宽度可以反映图像的对比度。对比度较高的图像,直方图会在较宽的范围内分布,而对比度较低的图像,直方图会更加集中在一个较小的范围内。
颜色分布:对于彩色图像,可以分别计算每个颜色通道的直方图,从而了解图像的颜色分布情况。例如,红色通道的直方图可以显示图像中红色的分布情况,绿色通道的直方图可以显示图像中绿色的分布情况,蓝色通道的直方图可以显示图像中蓝色的分布情况。
通过分析直方图,我们可以获取关于图像亮度、对比度和颜色分布等方面的信息,从而帮助我们进行图像处理和分析。
- 直方图均衡化是什么意思?它的主要用途是什么?均衡化后的图像有什么特点?
直方图均衡化是一种图像增强技术,用于改善图像的对比度和亮度分布。它通过重新分配图像像素的灰度级,以获得更均匀的直方图分布。均衡化后的图像具有增强的对比度和更广泛的亮度范围,使得图像细节更加清晰可见。
直方图均衡化的主要用途包括:
1. 图像增强:通过增加图像的对比度,使得图像细节更加突出。
2. 图像处理:在一些图像处理任务中,如目标检测、图像分割和特征提取等,直方图均衡化可以提高算法的性能。
3. 视觉效果:直方图均衡化可以用于改善图像的视觉效果,例如在图像展示、摄影和电影制作中。
均衡化后的图像具有以下特点:
1. 对比度增强:均衡化后的图像具有更大的动态范围,使得图像中的细节更加明显。
2. 原始直方图被拉伸:均衡化会拉伸原始图像的直方图,使得它分布更加均匀。
3. 全局性质:直方图均衡化是一种全局操作,它不考虑图像中的局部特征。