1. Matlab图像处理概述
1.1.1. Matlab 相关函数介绍
- 功能:显示图像。
- 调用格式:
imshow(I,n)
:显示灰度图像 I, n 为要显示图像的灰度等级,整数,默认为 256。Imshow(I,[LOW HIGH])
:以规定的灰度级范围[LOW HIGH]来显示灰度图像 I,低于 LOW 值的 显示为黑,高于 HIGH 值的显示为白,默认按 256 个灰度级显示。imshow(RGB)
:显示真彩色图像 RGB。imshow(BW)
:显示二值图像 BW。imshow(X,map)
:显示索引图像, X 为索引图像的数据矩阵, map 为其颜色映射表。imshow filename
:显示 filename 指定的图像,若文件包括多帧图像,则显示第一幅,且文件必 须在 MATLAB 的当前目录下
- 功能:实现图像几何变换。
- 调用格式:
B = imtransform(A,TFORM,INTERP,param1,val1,param2,val2,…)
:对图像 A 实现空间变换TFORM 为 maketform 函数或 cp2tform 函数产生的结构; INTERP 为插值方法,可取“'nearest', 'bilinear', 'bicubic'”。 T = maketform(TRANSFORMTYPE,...):产生转换结构; TRANSFORMTYPE 为变换类型,可以 为“'affine', 'projective', 'custom', 'box', 'composite'”。
1.1.2. 显示图像
clc;
clear ;
I = imread('../pic/1/Fig0222(a)(face).tif');
[counts,x]=imhist(I);
[M,N] = size(I);
counts = counts./M/N;
figure,subplot(131),imshow(I),subplot(132),imhist(I);subplot(133),stem(x,counts);
axis tight
结果:
1.1.3. 图像保存
clc
clear
f = imread('../pic/1/Fig0219(rose1024).tif');
imshow(f)
print -f1 -djpeg -r300 hi_res_rose % 保存到当前目录
结果:
1.1.4. 图像模式转换
clc
clear
f1=100
uint8(round(f1*255)) % uint8: 0~255
f1 = [-0.5 0.5;0.75 1.5]
g1 = im2uint8(f1)
f2 = uint8(f1*100)
g2 = im2uint8(f2)
f3 = f1*100
g3 = im2uint8(f3)
f4 = uint16(f1*50000)
g4 = im2uint8(f4)
1.1.5. im2bw 灰度图象变为二值图像
clc
clear
I = imread('../pic/lema.png');
subplot(1,2,1);
imshow(I);
title('原图像');
BW = im2bw(I,0.46);
subplot(122);
imshow(BW);
title('二值图像');
1.1.6. imabsdiff 计算两幅图像间的绝对差
clc
clear
I = imread('../pic/1/Fig0222(b)(cameraman).tif');
subplot(131);imshow(I,[]);title('原图像');
J = uint8(filter2(fspecial('gaussian'), I));
subplot(132);imshow(J,[]);title('高斯滤波后的图像');
K = imabsdiff(I,J);
subplot(133);imshow(K,[]);title('相减后的图像');
1.1.7. imcomplement 对图像求补
clc
clear
im = imread('../pic/lema.png');
im2 = imcomplement(im);
subplot(1,2,1),imshow(im);title('原图像');
subplot(1,2,2),imshow(im2);title('求反操作后的图像');
1.1.8. 作业
- 实现了彩色图像的红绿通道互换、灰度化、旋转15度(最邻近插值、双线性插值)、缩放2.5倍(最邻近插值、双线性插值)两种几何变换以及镜像及拼接。
Click to show
Image1=imread('peppers.jpg');
%红绿通道互换
Image2=Image1;
Image2(:,:,1)=Image1(:,:,2);
Image2(:,:,2)=Image1(:,:,1);
imshow(Image2);
imwrite(Image2,'changecolor.jpg');
%灰度化
gray=rgb2gray(Image1);
figure;
subplot(121),imshow(Image1),title('Original Image');
subplot(122),imshow(gray),title('Gray Image');
imwrite(gray,'grayimage.jpg');
%图像旋转
Newgray1=imrotate(gray,15);
Newgray2=imrotate(gray,15,'bilinear');
figure;
subplot(121),imshow(Newgray1),title('旋转15°(最邻近插值) ');
subplot(122),imshow(Newgray2),title('旋转15°(双线性插值) ');
imwrite(Newgray1,'rotate1.jpg');
imwrite(Newgray2,'rotate2.jpg');
%图像缩放
Newgray3=imresize(gray,2.5,'nearest');
Newgray4=imresize(gray,2.5,'bilinear');
figure;
subplot(121),imshow(Newgray3),title('放大2.5倍(最邻近插值) ');
subplot(122),imshow(Newgray4),title('放大2.5倍(双线性插值) ');
imwrite(Newgray3,'scale1.jpg');
imwrite(Newgray4,'scale2.jpg');
%图像镜像与拼接
Image2=imread('lotus.bmp');
HImage=flipdim(Image2,2);
VImage=flipdim(Image2,1);
CImage=flipdim(HImage,1);
[h w]=size(Image2);
NewImage=zeros(h*2,w*2,3);
NewImage=[Image2 HImage;VImage CImage];figure,imshow(NewImage);
imwrite(NewImage,'newlotus.jpg');