圖像歸一化


一、簡介

圖像歸一化是計算機視覺、模式識別等領域廣泛使用的一種技術。所謂圖像歸一化, 就是通過一系列變換, 將待處理的原始圖像轉換成相應的唯一標准形式(該標准形式圖像對平移、旋轉、縮放等仿射變換具有不變特性)。 近年來, 基於矩的圖像歸一化技術受到了人們的普遍關注, 其基本工作原理為: 首先利用圖像中對仿射變換具有不變性的矩來確定變換函數的參數, 然后利用此參數確定的變換函數把原始圖像變換為一個標准形式的圖像(該圖像與仿射變換無關)。  一般說來, 基於矩的圖像歸一化過程包括 4 個步驟 即坐標中心化、x-shearing 歸一化、縮放歸一化和旋轉歸一化。

基本上歸一化思想是利用圖像的不變矩尋找一組參數使其能夠消除其他變換函數對圖像變換的影響。也就是轉換成唯一的標准形式以抵抗仿射變換。圖像歸一化使得圖像可以抵抗幾何變換的攻擊,它能夠找出圖像中的那些不變量,從而得知這些圖像原本就是一樣的或者一個系列的。以下你要知道的:
1.歸一化處理並沒有改變圖像的對比度
2.歸一化處理很簡單,假設原圖像是8位灰度圖像,那么讀入的像素矩陣最大值為256,最小值為1,定義矩陣為I,J=I/256,就是歸一化的圖像矩陣,就是說歸一化之后所有的像素值都在[0,1]區間內。

二、什么是歸一化

歸一化就是通過一系列變換(即利用圖像的不變矩尋找一組參數使其能夠消除其他變換函數對圖像變換的影響),將待處理的原始圖像轉換成相應的唯一標准形式(該標准形式圖像對平移、旋轉、縮放等仿射變換具有不變特性)。

基於矩的圖像歸一化技術基本工作原理為:首先利用圖像中對仿射變換具有不變性的矩來確定變換函數的參數, 然后利用此參數確定的變換函數把原始圖像變換為一個標准形式的圖像(該圖像與仿射變換無關)。 一般說來,基於矩的圖像歸一化過程包括4個步驟,即坐標中心化、x-shearing 歸一化、縮放歸一化和旋轉歸一化。

圖像歸一化使得圖像可以抵抗幾何變換的攻擊,它能夠找出圖像中的那些不變量,從而得知這些圖像原本就是一樣的或者一個系列的。

三、為什么歸一化

1.基本上歸一化思想是利用圖像的不變矩尋找一組參數使其能夠消除其他變換函數對圖像變換的影響。也就是轉換成唯一的標准形式以抵抗仿射變換。圖像歸一化使得圖像可以抵抗幾何變換的攻擊,它能夠找出圖像中的那些不變量,從而得知這些圖像原本就是一樣的或者一個系列的。

2.matlab里圖像數據有時候必須是浮點型才能處理,而圖像數據本身是0-255的UNIT型數據所以需要歸一化,轉換到0-1之間。

3.歸一化是一種簡化計算的方式,即將有量綱的表達式,經過變換,化為無量綱的表達式,成為純量。目的是為了:

(1)避免具有不同物理意義和量綱的輸入變量不能平等使用

(2)bp中常采用sigmoid函數作為轉移函數,歸一化能夠防止凈輸入絕對值過大引起的神經元輸出飽和現象

(3)保證輸出數據中數值小的不被吞食

3.神經網絡中歸一化的原因:

歸一化是為了加快訓練網絡的收斂性,可以不進行歸一化處理;

歸一化的具體作用是歸納統一樣本的統計分布性。歸一化在0-1之間是統計的概率分布,歸一化在-1--+1之間是統計的坐標分布。歸一化有同一、統一和合一的意思。無論是為了建模還是為了計算,首先基本度量單位要同一,神經網絡是以樣本在事件中的統計分別幾率來進行訓練(概率計算)和預測的,歸一化是同一在0-1之間的統計概率分布;當所有樣本的輸入信號都為正值時,與第一隱含層神經元相連的權值只能同時增加或減小,從而導致學習速度很慢。為了避免出現這種情況,加快網絡學習速度,可以對輸入信號進行歸一化,使得所有樣本的輸入信號其均值接近於0或與其均方差相比很小。

歸一化是因為sigmoid函數的取值是0到1之間的,網絡最后一個節點的輸出也是如此,所以經常要對樣本的輸出歸一化處理。所以這樣做分類的問題時用[0.9 0.1 0.1]就要比用[1 0 0]要好。

但是歸一化處理並不總是合適的,根據輸出值的分布情況,標准化等其它統計變換方法有時可能更好。

四、matlab圖像處理如何歸一化

matlab中的歸一化處理有三種方法
1. premnmx、postmnmx、tramnmx、mapminmax

(1)premnmx函數用於將網絡的輸入數據或輸出數據進行歸一化,歸一化后的數據將分布在[-1,1]區間內。

premnmx語句的語法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T),其中P,T分別為原始輸入和輸出數據。

在訓練網絡時如果所用的是經過歸一化的樣本數據,那么以后使用網絡時所用的新數據也應該和樣本數據接受相同的預處理,這就要用到tramnmx函數:

(2)tramnmx語句的語法格式是:[PN]=tramnmx(P,minp,maxp)

其中P和PN分別為變換前、后的輸入數據,maxp和minp分別為premnmx函數找到的最大值和最小值。

網絡輸出結果需要進行反歸一化還原成原始的數據,常用的函數是:postmnmx。

(3)postmnmx語句的語法格式是:[PN] = postmnmx(P,minp,maxp)

其中P和PN分別為變換前、后的輸入數據,maxp和minp分別為premnmx函數找到的最大值和最小值。

(4)還有一個函數是mapminmax,該函數可以把矩陣的每一行歸一到[-1 1].

mapminmax語句的語法格式是:[y1,PS] = mapminmax(x1),其中x1 是需要歸一的矩陣 y1是結果。

當需要對另外一組數據做歸一時,就可以用下面的方法做相同的歸一了

y2 = mapminmax('apply',x2,PS)

當需要把歸一的數據還原時,可以用以下命令:

x1_again = mapminmax('reverse',y1,PS) 

1> 默認的map范圍是[-1, 1],所以如果需要[0, 1],則按這樣的格式提供參數:
  MappedData = mapminmax(OriginalData, 0, 1);
2> 只按行歸一化,如果是矩陣,則每行各自歸一化;
3> 如果需要對整個矩陣歸一化,用如下方法:
  FlattenedData = OriginalData(:)'; % 展開矩陣為一列,然后轉置為一行。
  MappedFlattened = mapminmax(FlattenedData, 0, 1); % 歸一化。
  MappedData = reshape(MappedFlattened, size(OriginalData)); % 還原為原始矩陣形式。此處不需轉置回去,因為reshape恰好是按列重新排序

    三種歸一化方法:

除以序列最大值的,叫峰歸一化;
除以序列之和的,叫面積歸一化;
除以序列的模,叫數值歸一化,得到序列的方差為0,均值為1;
(1) 線性函數轉換,表達式如下:
y=(x-MinValue)/(MaxValue-MinValue)
y=0.1+(x-min)/(max-min)*(0.9-0.1)(歸一到0.1-0.9之間)
說明:x、y分別為轉換前、后的值,MaxValue、MinValue分別為樣本的最大值和最小值。
(2) 對數函數轉換,表達式如下:
y=log10(x)
說明:以10為底的對數函數轉換。
(3) 反余切函數轉換,表達式如下:
y=atan(x)*2/PI
(4) Z-score標准化方法
這種方法給予原始數據的均值(mean)和標准差(standard deviation)進行數據的標准化。經過處理的數據符合標准正態分布,即均值為0,標准差為1,轉化函數為:

其中為所有樣本數據的均值,為所有樣本數據的標准差。
(5)一個歸一化代碼.
    I = double(I);

    maxvalue = max(max(I)');

%max在把矩陣每列的最大值找到,並組成一個單行的數組,轉置一下就會行轉換為列,再max就求一個最大的值,如果不轉置,只能求出每列的最大值。

f = 1 - I/maxvalue; %為什么要用1去減?
    Image1 = f;

 

 參考:http://blog.csdn.net/yihaizhiyan/article/details/6696912

http://blog.sina.com.cn/s/blog_675eb4fd01012chi.html

 http://blog.sina.com.cn/s/blog_4aee288a0100ibt3.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM