1. 程式人生 > >matlab影象進行變換

matlab影象進行變換

 線性點運算

a=imread('20151130101641521.tif');
subplot(231);
imshow(a);
title('原始影象');
b1=a+45;  %灰度值增加45
subplot(232);
imshow(b1);
title('灰度值增加');
b2=a*1.35;   %影象對比度增大
subplot(233);
imshow(b2);
title('對比度增加');
b3=0.55*a;     %影象對比度減少
subplot(234);
imshow(b3);
title('對比度減少');
b4=-double(a)+255;%影象求補,把a的型別轉換成double後,再把double型別轉換為uint8
subplot(235);
imshow(uint8(b4));
title('雙精度型別');

結果:

 

 分段線性點運算

為了突出影象中感興趣的目標或灰度區間,可採用分段線性法,將需要的影象細節灰度拉伸,對比度增加。

 

 

非線性變換

當輸出影象的畫素點灰度值與輸入影象的畫素點灰度值不滿足線性關係時,這種灰度變換都稱為非線性灰度變換。

J = imadjust(I)

將灰度影象 I 中的亮度值對映到 J 中的新值並使 1% 的資料是在低高強度和飽和,這增加了輸出影象 J 的對比度值。此用法相當於 imadjust(I,stretchlim(I))

 

J = imadjust(I,[low_in; high_in],[low_out; high_out])

將影象I中的亮度值對映到J中的新值,即將low_in至high_in之間的值對映到low_out至high_out之間的值。low_in 以下與 high_in 以上的值被剪下掉了,也就是說,low_in 以下的值對映到 low_out,high_in 以上的值對映到high_out。它們都可以使用空的矩陣[],預設值是[0 1]

 

J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)

將影象 I 中的亮度值對映到 J 中的新值,其中 gamma指定描述值I和值J關係的曲線形狀。如果gamma小於1,此對映偏重更高數值(明亮)輸出,如果gamma大於1,此對映偏重更低數值(灰暗)輸出,如果省略此引數,預設為(線性對映)。 

 

newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)

調整索引色影象的調色盤map。如果low_in, high_in, low_out, high_out 和 gamma 都是標量,那麼對 r,g,b 分量同時都做此對映。對於每個顏色分量都有唯一的對映,當 low_in 和 high_in 同時為1*3向量或者 low_out 和 high_out 同時為1*3向量或者 gamma 為1*3向量時。調整後的顏色矩陣 newmap 和 map 有相同的大小。

 

RGB2 = imadjust(RGB1,...)

對 RGB 影象 RGB1 的紅、綠、藍調色盤分別進行調整。隨著顏色矩陣的調整,每一個調色盤都有唯一的對映值。

M=imread('20151130101641521.tif');
I=rgb2gray(M);
subplot(221);imshow(I);
J=imadjust(I); %調整灰度
subplot(222);imshow(J);
title('原始影象灰度調整');
K=imadjust(I,[0.3,0.7],[]);
subplot(223);imshow(K)
title('影象變亮');
G=imadjust(I,[0.3,0.7],[0,1],4);
subplot(224);imshow(G)
title('影象變暗');

 

 結果:

 直方圖修正

灰度級的直方圖就是反映一幅影象中的灰度級與出現這種灰度概率之間關係的圖形。

MATLAB中的imhist函式計算和顯示影象的直方圖。呼叫格式:

(1)imhist(I,n),繪製灰度影象的直方圖。

(2)imhist(X,map),繪製索引色影象的直方圖。

(3)[counts,x]=imhist(...)

其中,I代表灰度影象,n為指定的灰度級數目,預設為256,counts和x分別為返回直方圖資料向量和相應的色彩值向量。

%利用imhist函式計算和顯示灰度影象的直方圖
I=imread('20151130101641521.tif');
subplot(121);imshow(I);
title('原始影象');
subplot(122);imhist(I);
title('灰度直方圖');

 

結果:

  
直方圖均衡化 

直方圖均衡化是一種利用灰度變換自動調節影象對比質量的方式,基本思想是通過灰度級的概率密度函式求出灰度變換函式,它是一種以累積分佈函式變換法為基礎的直方圖修正法。

步驟:

(1)求出給定待處理的直方圖

(2)利用累計分佈函式對原影象的統計直方圖作變換,得到新的影象灰度

(3)進行近似處理,將新灰度代替舊灰度,同時將灰度值相等或者相近的每個灰度值直方圖合併一起。

histep函式:

(1)J=histep(I,n),直方圖均衡化,指定均衡化後的灰度級數n,n預設為64

(2)[J,T]=histep(I,...),返回能將影象I的直方圖轉換為影象J的直方圖的變換矩陣T

(3)[newmap,T]=histep(X,...)返回能將索引影象I的直方圖轉換為newmapyans直方圖的變換矩陣T。

%利用histep函式對灰度影象進行直方圖均衡化
I=imread('20151130101641521.tif');
J=histeq(I);
subplot(221);imshow(I);
title('原始影象');
subplot(222);imshow(J);
title('影象均衡化');
subplot(223);imhist(I,64);
title('原影象的直方圖');
subplot(224);imhist(J,64);
title('影象均衡化的直方圖');

結果:

 

直方圖規定劃 

直方圖均衡化所產生的直方圖是近似均勻的,但有時為了增加影象中某些灰度級,從而得到具有特定屬性的直方圖影象,由此產生了直方圖規定劃處理。直方圖規定劃是對影象的直方圖進行處理,使得處理後的影象直方圖的形狀逼近使用者希望的直方圖。

histeq函式的呼叫格式:

(1)J=histeq(I,hgram).I為輸入的直方影象,hgram為一個整數向量,表示使用者希望的直方圖形狀,該向量的長度與規定的效果有密度關係,向量越短,最後得到的直方圖越逼近使用者希望的直方圖。

(2)newmap=histeq[X,map,hgram],對索引影象X進行直方圖規定劃,引數map為列數為3的矩陣,表示色圖。

%利用histep函式對影象進行規定劃處理
I=imread('20151130101641521.tif');
hgram=ones(1,256);
J=histeq(I,hgram);
subplot(121);imshow(uint8(I));
title('原始影象');
subplot(122);imhist(J)

結果: