這篇文章只羅列出一些最簡單的映像格式轉換方法。
1,RGB映像轉與灰階圖相互轉換
從視覺角度來看rgb映像是有色彩的,而灰階圖則只有255種灰色。
從矩陣來看,rgb是個三維矩陣--三個二維矩陣落在一起,一層是R一層是G一層是B。灰階圖是個二維矩陣。
從rgb映像轉換為灰階圖很容易:rgb2gray(f) 一個函數搞定。至於原理是什麼,沒時間管它因為暫時用不著,感興趣的有時間可以瞭解一些。
但是從灰階圖轉換為rgb有點費事了,我也很奇怪這一點,去網上查了好多,貌似技術控們總是喜歡用技術含量高的東西,很多方法都是用colormap完成的,這東西很好,但是我不能在10分鐘搞明白,所以我又找到了一個更簡單的方法--把二維的複製三次讓他成為三維的不就行了?嗯,果真是行的。
rgbf=repmat(gf,[1 1 3]), 這個函數就是把灰階映像f的矩陣,在一維方向複製一次,二維方向複製一次,三維方向複製三次。~不是在源映像複製,是在rgbf上複製,複製完rgbf是個size(f,1),size(f,2),3的三維矩陣。這樣就可以把rgbf當做彩色圖來使用了,比如將圖片(100,100)這一點標記為紅色---rgbf(100,100,:)=[255,0,0];
下面舉個簡單的小例子。因為我的目的不是將灰階圖複原成彩色圖,而只是在灰階圖上用一些色彩標記一些特定的地區而已,目的很簡單,實現起來也很容易。下面將展示如何將fig1中的黑色部分變為紅色。fig1其實是個二值映像,之後0和1兩個值。
代碼很簡單:
blacks=find(fig1==0); %得到黑色地區
fr=fig1; % 複製r,g,b通道
fg=fig1;
fb=fig1;
fr(blacks)=255; % 將黑色變為紅色
fg(blacks)=0;
fb(blacks)=0;
figrgb=cat(3,fr,fg,fb); % 合成彩色映像
fig1 figrgb
2,double(f),將unit8或是uint16轉化為浮點型,因為無符號整形是很容易越界的,所以經常要轉換為浮點數來用。
3,把浮點數轉換為unit8或是unit16 把矩陣乘以255或是65536就可以。
4,mat2gray(f) 把矩陣f的值轉換到[0 1]範圍內。
5,im2uint8(f) 轉換為uint8格式,如果f是浮點數,那麼先將f整到[0 1]範圍內。