实验一 图像的基本运算
一、实验目的
(1)掌握点运算和代数运算的算法实现和概念
(2)掌握和几何运算的算法实现和概念
(2)掌握灰度变换和几何变换的基本方法
(3)理解图像灰度直方图的概念
二、实验内容
(1)任意选择几幅图像,查看其直方图,说明直方图和图像的对应关系。
(2)任意选择几幅图像,对其进行灰度线性变换,结合以下情况分析输入图像和输出图像两者有何变化。
Ø 当斜率a>1时;
Ø 当斜率 a<1时;
Ø 当斜率a=1,b<0时;
Ø 当斜率a=1,b>0时;
Ø 当斜率a=1,b=0时;
Ø 当斜率a=-1,b=255时;
(3)选择几幅图像,对其进行灰度拉伸,选择不同的拉伸参数,观察图像与原图有何不同,总结灰度拉伸的原理。
(4)选择几幅图像对其进行几何变换,理解不同变换对图像产生的影响。
三、实验代码、结果、分析
(1)代码:
I=imread('C:\Users\xxxy\Desktop\1.jpg'); imshow(I)
I=rgb2gray(I); %将真彩色图像转换为灰度图像,即灰度化处理
add=[]; tab1=zeros(1,256);
for n=0:255
X=I==n; add=[add;sum(sum(X))];
end;
[a b]=size(I); final=add/(a*b);
figure; imshow(I);
figure; bar(0:255,final,'g')
figure; imhist(I)
结果:
图1-1:原图 图1-2:灰度图
图1-3 直方图 图1-4 纵坐标扩大直方图
分析:灰度直方图描述了该灰度级的像素的个数,其横坐标是灰度级,纵坐标是该灰度级出现的概率,eg:灰度值为100的概率可近似看做0.004
(2)代码
I=imread('C:\Users\xxxy\Desktop\2.jpg'); imshow(I)
y=a*I+b/255; %线性点运算
figure subplot(2,2,1); imshow(y);
图2-1 原图
a,b值分别如下,及结果图:
[1]a=2;b=10; [2]a=0.3;b=1;
图2-2:a>1 图2-3:a<1
[3]a=1;b=-10; [4]a=1;b=10; [5]a=1;b=0;
图2-4:a=1,b<0 图2-5:a=1,b>0 图2-6:a=1,b=0
[7]a=-1;b=255;
图2-7:a=-1,b=255
分析:
[1] 如果a>1,输出图像的对比度变大,即图像变得更亮
[2] 如果a<1,输出图像的对比度减小,即图像变得更暗
[3] 如果a=1,b<0,输出图像下移,图像显示的更暗
[4] 如果a=1,b>0,输出图像上移,图像显示的更亮
[5] 如果a=1,b=0,输出图像不变,与原图像一样
[6] 如果a=1,b<0,输出图像下移,图像显示的更暗
[7] 如果a<0,b<0,输出图像亮区变暗,暗区变亮
(3)代码:
I=imread('C:\Users\xxxy\Desktop\3.jpg');imshow(I)
Y=double(I); %将参数I转为双精度浮点类型
[M,N]=size(Y);
for i=1:M
for j=1:N
if Y(i,j)<=30
Y(i,j)=I(i,j);
else if Y(i,j)<=150
Y(i,j)=(200-30)/(160-30)*(I(i,j)-30)+30;
else Y(i,j)=(255-200)/(255-150)*(I(i,j)-150)+200;
end
end
end
end
figure(2); imshow(uint8(Y))
结果:
图3-1:原图 图3-2:灰度拉伸
分析:
将其小于30的灰度值不变,将30到150的灰度值拉伸到30到200,同时压缩150到255的灰度值到200到255之间
(4)代码:
I=imread('C:\Users\xxxy\Desktop\4.jpg'); imshow(I); figure;
se = translate(strel(1), [100 100]);
a = imdilate(I,se); imshow(a)%平移 figure;
b = imresize(I,1.5) imshow(b)%放大1.5 figure;
c= imresize(I,0.5) imshow(c)%缩小0.5 figure;
[height,width,dim]=size(I);
tform1=maketform('affine',[-1 0 0;0 1 0;width 0 1]);
d1=imtransform(I,tform1,'nearest'); imshow(d1);%水平镜像 figure;
tform2=maketform('affine',[1 0 0;0 -1 0;0 height 1]);
d2=imtransform(I,tform2,'nearest'); imshow(d2);%垂直镜像 figure;
e1 = imrotate(I,90); imshow(e1)%旋转90度 figure;
e2 = imrotate(I,180); imshow(e2)%旋转180度 figure;
e3 = imrotate(I,270); imshow(e3)%旋转270度 figure;
e4 = imrotate(I,360); imshow(e4)%旋转360度 figure;
图4-1:原图 图4-2:平移
图4-3:放大1.5 图4-4:缩小0.5
图4-5:水平镜像 图4-5:垂直镜像
图4-7:旋转90度 图4-8:旋转180度
图4-9:旋转270度 图4-10:旋转360度