Matlab学习笔记(四)--图像处理

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 ;

猜你喜欢

转载自blog.csdn.net/huzhizhewudi/article/details/84439107