1. 程式人生 > >Matlab學習筆記(四)--影象處理

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 ;