2017年3月16日 星期四

[Matlab] 簡易影像處理 (負片效果) (取出三原色)

這學期,因為剛好課沒這麼多了,所以就去修了一直很想學的Matlab,今天老師教了簡單的影像處理,底下就做些筆記,順便加一些影像的小觀念。

一、負片效果

在24全彩影像中,由三原色(RGB)組成,各8 bits,因此每個顏色都有2^8 = 256種可能(0~255),當對每個像素pixel P = 255 - P 時, 就會成為我們的負片效果了


下面來個範例圖,這題老師希望我們將圖片中間做成負片效果


中間部分的負片效果

程式如下:

!讀入圖片"001.jpg",若圖片和程式碼檔案位置相同時,則不需要填寫路徑
!Matlab會自動將所有pixel存成一個三維陣列A1
A1=imread('001.jpg');
!New_A會是一個三維陣列,其中每個質,都會是255-A1相對應的質
!New_A就是一個做完負片效果的圖了
New_A = 255-A1;
!取得A1的大小,m = 長, n = 寬 ,p = 3(分別代表RGB)
[m,n,p] = size(A1);
!將B先複製成A1
!將B圖中間部分替換成New_A做成負片效果
B = A1;
B(round(m/4):round(m/4*3),round(n/4):round(n/4*3),:)=New_A(round(m/4):round(m/4*3),round(n/4):round(n/4*3),:);
!輸出B
imshow(uint8(B));
view raw 001.m hosted with ❤ by GitHub



二、分別取出RGB





程式碼:
!讀入圖片"001.jpg",若圖片和程式碼檔案位置相同時,則不需要填寫路徑
!Matlab會自動將所有pixel存成一個三維陣列A1
A1=imread('001.jpg');
!New_A會是一個三維陣列,其中每個質,都會是255-A1相對應的質
!New_A就是一個做完負片效果的圖了
New_A = 255-A1;
!取得A1的大小,m = 長, n = 寬 ,p = 3(分別代表RGB)
[m,n,p] = size(A1);
!將A1的R和G的pixel都設為一,則取出藍色部分,其他顏色作法依此類推
A1(:,:,1:2) = 0;
!取紅色 則改成A1(:,:,2:3) = 0;
!取綠色 改成A1(:,:,1) = 0; A1(:,:,3) = 0;
!輸出A1
imshow(uint8(A1));
view raw 001.m hosted with ❤ by GitHub



[結論]
一開始學習多媒體影像處理的時候,是從C++入手的,今天換成Matlab時,突然覺得好簡單,code完全不會超過10行,想當初光是讀檔,就快死翹翹了,但想不到Matlab連讀檔都變得這麼簡單,但或許這只是一個開端而已,想當初C++一開始學的時候也只有cin cout...

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。