1、图像的读取与显示
>> rgb = imread('F:\图片\beautiful scenery\\2.jpg'); %读取图片
>> image(rgb) %显示图片
2、通过矩阵产生图像
>> A = [1 2 0 ;5 6 7;12 90 7];
>> imshow(A)
3、读取图像数据到数组
A = imread('tp.jpg') ;%图片数据存储在A中
对于一张真色彩图片,数组A是一个三维数组,即M*N*3.
注意:对数组A进行运算时候,要将其转换成double型才可以,否则会算术溢出(当值大于255便溢出)。例如T=[123 252 12 0]为数组A中的以部分元素,则T(1)+T(2)=0(溢出)。
因此对于图像数组运算千万要注意!
将图像数组转换成double型方法:
A = im2double(A).此时A中数字均会按照相应的比例转换成double数字.
4、改变图像像素
函数imresize(A,[M,N])将图片A的像素变成N*M,并返回改变像素后的图片。例:
hf = imread('E:\临时文件\38.jpg') ;
N = 800 ;%图片的像素为800*800
hf = imresize(hf,[N,N]) ;
5、窗口分割
【例一】
A= imread('E:\临时文件\3.bmp') ;
%黑白照片上下左右旋转
C0 = A ;
C1 = rot90(C0,1) ;%逆时针旋转90
C2 = rot90(C0,2);%逆时针旋转180
C3 = rot90(C0,3);%逆时针旋转270
%显示旋转的图片
figure('NumberTitle','off','Name','图片旋转') ;
subplot(2,2,1) ;
imshow(C0) ;
xlabel('原始图片') ;
subplot(2,2,2) ;
imshow(C1) ;
xlabel('左旋转') ;
subplot(2,2,3) ;
imshow(C2) ;
xlabel('倒置') ;
subplot(2,2,4) ;
imshow(C3) ;
xlabel('右旋转') ;
pause(3) ;
close all ;
效果如图:
【例二】
A = [1 2 ;3 4];
subplot(6,2,1:2:11);
imshow(A/256);
for i = 2:2:12
subplot(6,2,i);
imshow(A'/256);
end
6、获取图像详细信息
使用函数imfinfo可以获取图像详细信息。
使用格式: imfinfo <filename>
例:
imfinfo 'F:\图片\Pure girl\\38.jpg'
结果如下:
Filename: 'F:\图片\Pure girl\38.jpg'
FileModDate: '27-八月-2012 18:03:45'
FileSize: 141602
Format: 'jpg'
FormatVersion: ''
Width: 500
Height: 473
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ''
NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}
7、图片的保存
imwrite函数用来保存图像。
使用格式1 :
imwrite(f,’filename’)
filename中必须包含可是别的文件格式扩展名。
【例一】:
hf = imread('F:\图片\Pure girl\\38.jpg') ;
imwrite(hf,'E:\\tmp.tif') ;
使用格式二:
imwrite(hf,'filename.tif','compression','parameter','resolution',[colres,rowres]);
给中方法仅适用于保存成tif格式。
【例二】:
hf = imread('F:\图片\Pure girl\\38.jpg') ;
imwrite(hf,'E:\\tmp1.tif','compression','none','resolution',[200,200]);
imwrite(hf,'E:\\tmp2.tif','compression','none','resolution',[300,300]);
hf = imread('E:\\tmp1.tif') ;
subplot(1,2,1) ;
imshow(hf) ;
hf = imread('E:\\tmp2.tif') ;
subplot(1,2,2) ;
imshow(hf) ;
注:最后一个参数的修改仅是改变图片的大小,并不改变图片的像素。
8、数据类
名称 |
描述 |
Double |
双精度浮点型,范围:-10^308~10^308(8比特每像素) |
Uint8 |
无符号8比特整数,范围[0,255](1比特每像素) |
Uint16 |
无符号16比特整数,范围[0,65535](2比特每像素) |
Uint32 |
无符号32比特整数,范围[0,4294967295](4比特每像素) |
Int8 |
有符号8比特整数,范围[-127,127](1比特每像素) |
Int16 |
有符号16比特整数,范围[-32678,32677](2比特每像素) |
Int32 |
有符号32比特整数,范围[-2147483648,2147483647](4比特每像素) |
Single |
单精度浮点数,范围-10^38~10^38(4比特每像素) |
Char |
字符(2比特每像素) |
Logical |
值为0或1(1比特每像素) |
注:函数round可以将浮点数转化成整数。
例如:roud(3.25) = 3.
数据间的类型可以直接转换;格式为
B = data_class_name(A),其中data_class_name上表格中的任意一项。
9、图像类和类型间的转换
名称 |
将输入转换为 |
有效的输入图像数据 |
Im2uint8 |
Uint8 |
Logical,uint8,uint16,,double |
Im2uint16 |
Uint16 |
Logical,uint8,uint16,double |
Mat2gray |
Double,范围为[0,1] |
Double |
Im2double |
Double |
Logical,uint8,uint16,double |
Im2bw |
Logical |
Uint8,uint16,double |
10、图像旋转转
10.1直接使用数组处理
【例一】
hf = imread('F:\pictures\Pure girl\\70.jpg');%读取的图像为三维数组
A = hf(end:-1:1,end:-1:1,:);
subplot(1,2,1) ;
imshow(hf);
xlabel('原图像');
subplot(1,2,2) ;
imshow(A) ;
xlabel('旋转后的图像');
10.2函数rot90()
使用格式:
B = rot90(A,n);
说明:
将矩阵A按照逆时针方向旋转n个90度,将旋转后的矩阵返回给B.
注:该函数只能对于二维矩阵进行旋转,并且旋转的度数为90的整数倍数.
【例二】
%只对二维数组旋转
hf = imread('F:\pictures\Pure girl\\70.jpg');
BL = hf(:,:,1);%变成黑白照片
A = rot90(BL,1);%逆时针转转90
B = rot90(BL,2) ;%逆时针旋转180
subplot(1,3,1) ;
imshow(hf);
xlabel('原图像');
subplot(1,3,2) ;
imshow(A) ;
xlabel('旋转90后的图像');
subplot(1,3,3) ;
imshow(B) ;
xlabel('旋转180后的图像');
10.3函数imrotate()
使用格式:
B = imrotate(A,angle)
B = imrotate(A,angle,method)
B = imrotate(A,angle,method,bbox)
说明:
第一个参数A为旋转前的矩阵;第二个参数angle为旋转的度数,如果angle为正数则按照逆时针方向旋转,否则按照顺时针方向旋转;第三个参数为旋转方法,即在空出的地方进行插值填充的方法;第四个参数设置旋转后图像的尺寸.
method取值如下:
Value |
Descripition |
Nearest |
取附近的值进行插值 |
Bilinear` |
双线性插值 |
Bicubic |
三次插值 |
注:nearest为缺省值.
bbox取值如下:
Value |
Description |
Crop |
使变换前后尺寸大小相同 |
Loose |
使变换后的图像尺寸适应窗口大小 |
注:loos为缺省值.
【例】
f = imread('F:\pictures\pure girl\1.jpg');
set(0,'defaultfigurecolor','w');%设置绘图窗口背景颜色
for i = 1:1:16
%每次旋转45度,且使旋转后的图片的尺寸大小不变
B = imrotate(f,i*45/2,'bilinear','crop');
imshow(B);
pause(1);
end
close ;