作业一:用Matlab实现图像的基本操作
1.实验要求:
数字图像的读入read、显示display;
数字图像的类型转换(type conversion);
数字图像的缩小Shrink、放大enlarge、配准registration;
2.实验结果:
(1)此图为彩色图像转为灰度图像、灰度图像转为二值图像的结果
(2)这四幅图为图像缩小、放大的结果
(双线性插值与双三次插值为采用matlab自带函数的结果)
(3)此图为图像的几种空间变换的结果
(4)此图为图像配准的结果
3.结果分析:(代码见附录)
(1)图像放大采用了三种方法进行插值,在进行双线性插值与双三次插值实验时,由于图片质量太高,程序运行了两个小时都没有出结果,为了检验程序的正确性,采用了一个自写的3*3矩阵进行验证,下图为验证结果。
(2)在做图像旋转的时候起初采用的是和平移、侧切这些相同的方法[i,j,1]*仿射矩阵,但这就导致了有负数和0的产生,所以将图像的原点进行了更改,从左上角改到了图像的中心。
(3)图像配准,首先利用函数cpselect(输入图像,参考图像),找到4个约束点,如下图;
其次,利用矩阵的运算法则AC=B可推到出C=A的逆B; 最后,利用公式
x=round(c1i+c2j+c3ij+c4); y=round(c5i+c6j+c7i*j+c8);则可把变形图反变化回来。
4.附录:
clc
close all
%读取图像
a = imread(‘E:\数字图像处理\Fig0333(a)(test_pattern_blurring_orig).tif’)
b = imread(‘E:\数字图像处理\Fig0222(a)(face).tif’)
c = imread(‘E:\数字图像处理\people.jpg’)
d = imread(‘E:\数字图像处理\Fig0222©(crowd).tif’)
e = imread(‘E:\数字图像处理\dog.jpg’)
%查看图像信息
imfinfo E:\数字图像处理\Fig0333(a)(test_pattern_blurring_orig).tif
%类型转换(matlab自带函数)
figure
subplot(2,2,1); imshow(e); title(“彩色图像”)
subplot(2,2,2); e1 = rgb2gray(e); imshow(e1); title(“灰度图像”)
subplot(2,2,3); imshow(b); title(“灰度图像”)
subplot(2,2,4); thresh = graythresh(b); b1 = im2bw(b,thresh); imshow(b1); title(“二值图像”)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%类型转换(公式法)
figure
subplot(2,2,1); imshow(e); title(“彩色图像”)
subplot(2,2,2); R = e(:,:,1); G = e(:,:,2); B = e(:,:,3); e2 = (R+G+B)/3; imshow(e2); title(“灰度图像”)
subplot(2,2,3); imshow(b); title(“灰度图像”)
subplot(2,2,4);
[m,n] =size(b);
zmax=max(max(b));%取出最大灰度值
zmin=min(min(b));
thresh1=(zmax+zmin)/2;