1. cvfitline用的什麼演算法
1、cvLoadImage:將圖像文件載入至內存;
2、cvNamedWindow:在屏幕上創建一個窗口;
3、cvShowImage:在一個已創建好的窗口中顯示圖像;
4、cvWaitKey:使程序暫停,等待用戶觸發一個按鍵操作;
5、cvReleaseImage:釋放圖像文件所分配的內存;
6、cvDestroyWindow:銷毀顯示圖像文件的窗口;
7、cvCreateFileCapture:通過參數設置確定要讀入的AVI文件;
8、cvQueryFrame:用來將下一幀文件載入內存;
9、cvReleaseCapture:釋放CvCapture結構開辟的內存空間;
10、cvCreateTrackbar:創建一個滾動條;
11、cvSetCaptureProperty:設置CvCapture對象的各種屬性;
12、cvGetCaptureProperty:查詢CvCapture對象的各種屬性;
13、cvGetSize:當前圖像結構的大小;
14、cvSmooth:對圖像進行平滑處理;
15、cvPyrDown:圖像金字塔,降采樣,圖像縮小為原來四分之一;
16、cvCanny:Canny邊緣檢測;
17、cvCreateCameraCapture:從攝像設備中讀入數據;
18、cvCreateVideoWriter:創建一個寫入設備以便逐幀將流寫入文件;
19、cvWriteFrame:逐幀將流寫入文件;
20、cvReleaseVideoWriter:釋放CvVideoWriter結構開辟的內存空間;
21、CV_MAT_ELEM:從矩陣中得到一個元素;
22、cvAbs:計算數組中所有元素的絕對值;
23、cvAbsDiff:計算兩個數組差值的絕對值;
24、cvAbsDiffS:計算數組和標量差值的絕對值;
25、cvAdd:兩個數組的元素級的加運算;
26、cvAddS:一個數組和一個標量的元素級的相加運算;
27、cvAddWeighted:兩個數組的元素級的加權相加運算(alpha運算);
28、cvAvg:計算數組中所有元素的平均值;
29、cvAvgSdv:計算數組中所有元素的絕對值和標准差;
30、cvCalcCovarMatrix:計算一組n維空間向量的協方差;
31、cvCmp:對兩個數組中的所有元素運用設置的比較操作;
32、cvCmpS:對數組和標量運用設置的比較操作;
33、cvConvertScale:用可選的縮放值轉換數組元素類型;
34、cvCopy:把數組中的值復制到另一個數組中;
35、cvCountNonZero:計算數組中非0值的個數;
36、cvCrossProct:計算兩個三維向量的向量積(叉積);
37、cvCvtColor:將數組的通道從一個顏色空間轉換另外一個顏色空間;
38、cvDet:計算方陣的行列式;
39、cvDiv:用另外一個數組對一個數組進行元素級的除法運算;
40、cvDotProct:計算兩個向量的點積;
41、cvEigenVV:計算方陣的特徵值和特徵向量;
42、cvFlip:圍繞選定軸翻轉;
43、cvGEMM:矩陣乘法;
44、cvGetCol:從一個數組的列中復制元素;
45、cvGetCols:從數據的相鄰的多列中復制元素;
46、cvGetDiag:復制數組中對角線上的所有元素;
47、cvGetDims:返回數組的維數;
48、cvGetDimSize:返回一個數組的所有維的大小;
49、cvGetRow:從一個數組的行中復制元素值;
50、cvGetRows:從一個數組的多個相鄰的行中復制元素值;
51、cvGetSize:得到二維的數組的尺寸,以CvSize返回;
52、cvGetSubRect:從一個數組的子區域復制元素值;
53、cvInRange:檢查一個數組的元素是否在另外兩個數組中的值的范圍內;
54、cvInRangeS:檢查一個數組的元素的值是否在另外兩個標量的范圍內;
55、cvInvert:求矩陣的逆;
56、cvMahalonobis:計算兩個向量間的馬氏距離;
57、cvMax:在兩個數組中進行元素級的取最大值操作;
58、cvMaxS:在一個數組和一個標量中進行元素級的取最大值操作;
59、cvMerge:把幾個單通道圖像合並為一個多通道圖像;
60、cvMin:在兩個數組中進行元素級的取最小值操作;
61、cvMinS:在一個數組和一個標量中進行元素級的取最小值操作;
62、cvMinMaxLoc:尋找數組中的最大最小值;
63、cvMul:計算兩個數組的元素級的乘積(點乘);
64、cvNot:按位對數組中的每一個元素求反;
65、cvNormalize:將數組中元素進行歸一化;
66、cvOr:對兩個數組進行按位或操作;
67、cvOrs:在數組與標量之間進行按位或操作;
68、cvRece:通過給定的操作符將二維數組簡為向量;
69、cvRepeat:以平鋪的方式進行數組復制;
70、cvSet:用給定值初始化數組;
71、cvSetZero:將數組中所有元素初始化為0;
72、cvSetIdentity:將數組中對角線上的元素設為1,其他置0;
73、cvSolve:求出線性方程組的解;
74、cvSplit:將多通道數組分割成多個單通道數組;
75、cvSub:兩個數組元素級的相減;
76、cvSubS:元素級的從數組中減去標量;
77、cvSubRS:元素級的從標量中減去數組;
78、cvSum:對數組中的所有元素求和;
79、cvSVD:二維矩陣的奇異值分解;
80、cvSVBkSb:奇異值回代計算;
81、cvTrace:計算矩陣跡;
82、cvTranspose:矩陣的轉置運算;
83、cvXor:對兩個數組進行按位異或操作;
84、cvXorS:在數組和標量之間進行按位異或操作;
85、cvZero:將所有數組中的元素置為0;
86、cvConvertScaleAbs:計算可選的縮放值的絕對值之後再轉換數組元素的類型;
87、cvNorm:計算數組的絕對范數, 絕對差分范數或者相對差分范數;
88、cvAnd:對兩個數組進行按位與操作;
89、cvAndS:在數組和標量之間進行按位與操作;
90、cvScale:是cvConvertScale的一個宏,可以用來重新調整數組的內容,並且可以將參數從一種數
據類型轉換為另一種;
91、cvT:是函數cvTranspose的縮寫;
92、cvLine:畫直線;
93、cvRectangle:畫矩形;
94、cvCircle:畫圓;
95、cvEllipse:畫橢圓;
96、cvEllipseBox:使用外接矩形描述橢圓;
97、cvFillPoly、cvFillConvexPoly、cvPolyLine:畫多邊形;
98、cvPutText:在圖像上輸出一些文本;
99、cvInitFont:採用一組參數配置一些用於屏幕輸出的基本個特定字體;
100、cvSave:矩陣保存;
101、cvLoad:矩陣讀取;
102、cvOpenFileStorage:為讀/寫打開存儲文件;
103、cvReleaseFileStorage:釋放存儲的數據;
104、cvStartWriteStruct:開始寫入新的數據結構;
105、cvEndWriteStruct:結束寫入數據結構;
106、cvWriteInt:寫入整數型;
107、cvWriteReal:寫入浮點型;
108、cvWriteString:寫入字元型;
109、cvWriteComment:寫一個XML或YAML的注釋字串;
110、cvWrite:寫一個對象;
111、cvWriteRawData:寫入多個數值;
112、cvWriteFileNode:將文件節點寫入另一個文件存儲器;
113、cvGetRootFileNode:獲取存儲器最頂層的節點;
114、cvGetFileNodeByName:在映圖或存儲器中找到相應節點;
115、cvGetHashedKey:為名稱返回一個惟一的指針;
116、cvGetFileNode:在映圖或文件存儲器中找到節點;
117、cvGetFileNodeName:返迴文件的節點名;
118、cvReadInt:讀取一個無名稱的整數型;
119、cvReadIntByName:讀取一個有名稱的整數型;
120、cvReadReal:讀取一個無名稱的浮點型;
121、cvReadRealByName:讀取一個有名稱的浮點型;
122、cvReadString:從文件節點中尋找字元串;
123、cvReadStringByName:找到一個有名稱的文件節點並返回它;
124、cvRead:將對象解碼並返回它的指針;
125、cvReadByName:找到對象並解碼;
126、cvReadRawData:讀取多個數值;
127、cvStartReadRawData:初始化文件節點序列的讀取;
128、cvReadRawDataSlice:讀取文件節點的內容;
129、cvGetMoleInfo:檢查IPP庫是否已經正常安裝並且檢驗運行是否正常;
130、cvResizeWindow:用來調整窗口的大小;
131、cvSaveImage:保存圖像;
132、cvMoveWindow:將窗口移動到其左上角為x,y的位置;
133、cvDestroyAllWindow:用來關閉所有窗口並釋放窗口相關的內存空間;
134、cvGetTrackbarPos:讀取滑動條的值;
135、cvSetTrackbarPos:設置滑動條的值;
136、cvGrabFrame:用於快速將幀讀入內存;
137、cvRetrieveFrame:對讀入幀做所有必須的處理;
138、cvConvertImage:用於在常用的不同圖像格式之間轉換;
139、cvErode:形態腐蝕;
140、cvDilate:形態學膨脹;
141、cvMorphologyEx:更通用的形態學函數;
142、cvFloodFill:漫水填充演算法,用來進一步控制哪些區域將被填充顏色;
143、cvResize:放大或縮小圖像;
144、cvPyrUp:圖像金字塔,將現有的圖像在每個維度上都放大兩倍;
145、cvPyrSegmentation:利用金字塔實現圖像分割;
146、cvThreshold:圖像閾值化;
147、cvAcc:可以將8位整數類型圖像累加為浮點圖像;
148、cvAdaptiveThreshold:圖像自適應閾值;
149、cvFilter2D:圖像卷積;
150、cvCopyMakeBorder:將特定的圖像輕微變大,然後以各種方式自動填充圖像邊界;
151、cvSobel:圖像邊緣檢測,Sobel運算元;
152、cvLaplace:拉普拉斯變換、圖像邊緣檢測;
153、cvHoughLines2:霍夫直線變換;
154、cvHoughCircles:霍夫圓變換;
155、cvRemap:圖像重映射,校正標定圖像,圖像插值;
156、cvWarpAffine:稠密仿射變換;
157、cvGetQuadrangleSubPix:仿射變換;
158、cvGetAffineTransform:仿射映射矩陣的計算;
159、cvCloneImage:將整個IplImage結構復制到新的IplImage中;
160、cv2DRotationMatrix:仿射映射矩陣的計算;
161、cvTransform:稀疏仿射變換;
162、cvWarpPerspective:密集透視變換(單應性);
163、cvGetPerspectiveTransform:計算透視映射矩陣;
164、cvPerspectiveTransform:稀疏透視變換;
165、cvCartToPolar:將數值從笛卡爾空間到極坐標(極性空間)進行映射;
166、cvPolarToCart:將數值從極性空間到笛卡爾空間進行映射;
167、cvLogPolar:對數極坐標變換;
168、cvDFT:離散傅里葉變換;
169、cvMulSpectrums:頻譜乘法;
170、cvDCT:離散餘弦變換;
171、cvIntegral:計算積分圖像;
172、cvDistTransform:圖像的距離變換;
173、cvEqualizeHist:直方圖均衡化;
174、cvCreateHist:創建一新直方圖;
175、cvMakeHistHeaderForArray:根據已給出的數據創建直方圖;
176、cvNormalizeHist:歸一化直方圖;
177、cvThreshHist:直方圖閾值函數;
178、cvCalcHist:從圖像中自動計算直方圖;
179、cvCompareHist:用於對比兩個直方圖的相似度;
180、cvCalcEMD2:陸地移動距離(EMD)演算法;
181、cvCalcBackProject:反向投影;
182、cvCalcBackProjectPatch:圖塊的方向投影;
183、cvMatchTemplate:模板匹配;
184、cvCreateMemStorage:用於創建一個內存存儲器;
185、cvCreateSeq:創建序列;
186、cvSeqInvert:將序列進行逆序操作;
187、cvCvtSeqToArray:復制序列的全部或部分到一個連續內存數組中;
188、cvFindContours:從二值圖像中尋找輪廓;
189、cvDrawContours:繪制輪廓;
190、cvApproxPoly:使用多邊形逼近一個輪廓;
191、cvContourPerimeter:輪廓長度;
192、cvContoursMoments:計算輪廓矩;
193、cvMoments:計算Hu不變矩;
194、cvMatchShapes:使用矩進行匹配;
195、cvInitLineIterator:對任意直線上的像素進行采樣;
196、cvSampleLine:對直線采樣;
197、cvAbsDiff:幀差;
198、cvWatershed:分水嶺演算法;
199、cvInpaint:修補圖像;
200、cvGoodFeaturesToTrack:尋找角點;
201、cvFindCornerSubPix:用於發現亞像素精度的角點位置;
202、cvCalcOpticalFlowLK:實現非金字塔的Lucas-Kanade稠密光流演算法;
203、cvMeanShift:mean-shift跟蹤演算法;
204、cvCamShift:camshift跟蹤演算法;
205、cvCreateKalman:創建Kalman濾波器;
206、cvCreateConDensation:創建condensation濾波器;
207、cvConvertPointsHomogenious:對齊次坐標進行轉換;
208、cvFindChessboardCorners:定位棋盤角點;
209、cvFindHomography:計算單應性矩陣;
210、cvRodrigues2:羅德里格斯變換;
211、cvFitLine:直線擬合演算法;
212、cvCalcCovarMatrix:計算協方差矩陣;
213、cvInvert:計算協方差矩陣的逆矩陣;
214、cvMahalanobis:計算Mahalanobis距離;
215、cvKMeans2:K均值;
216、cvCloneMat:根據一個已有的矩陣創建一個新矩陣;
217、cvPreCornerDetect:計算用於角點檢測的特徵圖;
218、cvGetImage:CvMat圖像數據格式轉換成IplImage圖像數據格式;
219、cvMatMul:兩矩陣相乘;
2. 什麼是自適應閾值去噪
自適應閾值是一種基於無限逼近某一值的思想,一般是用作圖像的處理上,得到的結果大多數是其平均值,得到的效果較為良好。。。去噪無非就是用閾值迭代的方法去除干擾。。。自適應閾值可能會因為一個小的誤差導致一個巨大的錯誤,使用時要注意
3. 自適應閾值小波圖像去噪怎麼編寫自適應閾值函數
主要是三類 1)基於點的全局閾值方法; 2)基於區域的全局閾值方法 3)局部閾值方法和多閾值方法 1)基於點的全局閾值方法 p-分位數法 1962年Doyle提出的p-分位數法是最古老的一種閾值選取方法 迭代方法選取閾值 初始...
4. 動態閾值一般有什麼演算法謝謝啦,沒錢。。。
%本程序是利用最大類間方差演算法求解自適應閾值,對圖像進行分割
clear;
warning off;
web -browser
SE = strel('diamond',4);
BW1 = imread('img1.bmp');
BW2 = imerode(BW1,SE);
BW3 = imdilate(BW2,SE);
BW4 = BW1-BW3;
%rgb轉灰度
if isrgb(BW4)==1
I_gray=rgb2gray(BW4);
else
I_gray=BW4;
end
figure,imshow(I_gray);
I_double=double(I_gray);%轉化為雙精度
[wid,len]=size(I_gray);
colorlevel=256; %灰度級
hist=zeros(colorlevel,1);%直方圖
%threshold=128; %初始閾值
%計算直方圖
for i=1:wid
for j=1:len
m=I_gray(i,j)+1;
hist(m)=hist(m)+1;
end
end
hist=hist/(wid*len);%直方圖歸一化
miuT=0;
for m=1:colorlevel
miuT=miuT+(m-1)*hist(m);
end
xigmaB2=0;
for mindex=1:colorlevel
threshold=mindex-1;
omega1=0;
omega2=0;
for m=1:threshold-1
omega1=omega1+hist(m);
end
omega2=1-omega1;
miu1=0;
miu2=0;
for m=1:colorlevel
if m<threshold
miu1=miu1+(m-1)*hist(m);
else
miu2=miu2+(m-1)*hist(m);
end
end
miu1=miu1/omega1;
miu2=miu2/omega2;
xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;
xigma(mindex)=xigmaB21;
if xigmaB21>xigmaB2
finalT=threshold;
xigmaB2=xigmaB21;
end
end
fT=finalT/255 %閾值歸一化
T=graythresh(I_gray)%matlab函數求閾值
for i=1:wid
for j=1:len
if I_double(i,j)>finalT
bin(i,j)=1;
else
bin(i,j)=0;
end
end
end
figure,imshow(bin);
figure,plot(1:colorlevel,xigma);
已發送,請查收,發送郵箱[email protected] ,你的郵箱名是錯的,彈回來了。反正這里也有,不發了。
5. 求解閾值分割T的閾值演算法或者方法是什麼
這個有好多種
迭代,峰谷,半峰谷,最小誤差,最大熵,等等,在了解這個前你要了解點陣圖概念,了解閾值分割的基本理論,可以q我:676229549
6. 自適應閾值閾值圖像分割演算法中,自適應閾值怎麼設定
根據灰度、梯度、形態等來設定自適應閾值。
設定過程:設置→參數→選擇(灰度、梯度、形態)→輸入數值→計算閾值→搞定。
閾值又叫臨界值,是指一個效應能夠產生的最低值或最高值。
閾值又稱閾強度,是指釋放一個行為反應所需要的最小刺激強度。低於閾值的刺激不能導致行為釋放。在反射活動中,閾值的大小是固定不變的,在復雜行為中,閾值則受各種環境條件和動物生理狀況的影響。當一種行為更難於釋放時,就是閾值提高了;當一種行為更容易釋放時,就是閾值下降了。一般說來,剛剛完成某一行為後,動物對這一行為的要求就會大大下降。例如剛交過尾的動物,對於性刺激或是沒有反應或是反應很弱,這就意味著釋放性行為的閾值增加了。類似情況在覓食行為和其他行為中也很常見。另一方面,長時間未發生的行為非常容易被釋放,釋放這種行為的刺激強度會變得非常小。在極端情況下,閾值的降低可以導致行為的自發產生,這就是空放行為(vacuum behavior)。空放行為是一種無刺激行為釋放,是達不到該種行為目的的一種行為。最令人信服的實例是織巢鳥的築巢行為。飼養在鳥籠中的織巢鳥,在得不到任何築巢材料和代用物的情況下,也完全可以表現出築巢動作,雖然這種動作達不到它本來的目的。
閾值又叫臨界值,是指一個效應能夠產生的最低值或最高值。
7. opencv中的自適應閾值函數adaptivethreshold中劃分的塊大小在計算局部閾值的時候
你是做什麼用的?
用一個像素是沒有辦法計算自適應閾值的。
計算自適應閾值:先求出每個像素的強度值,再利用自適應演算法在需要設定閾值的區域計算出自適應閾值。
計算每個像素的閾值?這個問法本身就有問題!!
文獻中從來沒有出現過這種叫法!能這么問的人估計也沒怎麼看過文獻。
顯然是計運算元區域的閾值。
8. 在遙感中閾值是什麼意思
圖像分割是圖像處理與計算機視覺領域低層次視覺中最為基礎和重要的領域之一,它是對圖像進行視覺分析和模式識別的基本前提.閾值法是一種傳統的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術.已被應用於很多的領域。本文是在閱讀大量國內外相關文獻的基礎上,對閾值分割技術稍做總結,分三個大類綜述閾值選取方法,然後對閾值化演算法的評估做簡要介紹。
關鍵詞
圖像分割 閾值選取 全局閾值 局部閾值 直方圖 二值化
1.引言
所謂圖像分割是指根據灰度、彩色、空間紋理、幾何形狀等特徵把圖像劃分成若干個互不相交的區域,使得這些特徵在同一區域內,表現出一致性或相似性,而在不同區域間表現出明顯的不同[37].簡單的講,就是在一幅圖像中,把目標從背景中分離出來,以便於進一步處理。圖像分割是圖像處理與計算機視覺領域低層次視覺中最為基礎和重要的領域之一,它是對圖像進行視覺分析和模式識別的基本前提.同時它也是一個經典難題,到目前為止既不存在一種通用的圖像分割方法,也不存在一種判斷是否分割成功的客觀標准。
閾值法是一種傳統的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術.已被應用於很多的領域,例如,在紅外技術應用中,紅外無損檢測中紅外熱圖像的分割,紅外成像跟蹤系統中目標的分割;在遙感應用中,合成孔徑雷達圖像中目標的分割等;在醫學應用中,血液細胞圖像的分割,磁共振圖像的分割;在農業工程應用中,水果品質無損檢測過程中水果圖像與背景的分割。在工業生產中,機器視覺運用於產品質量檢測等等。在這些應用中,分割是對圖像進一步分析、識別的前提,分割的准確性將直接影響後續任務的有效性,其中閾值的選取是圖像閾值分割方法中的關鍵技術。
2.閾值分割的基本概念
圖像閾值化分割是一種最常用,同時也是最簡單的圖像分割方法,它特別適用於目標和背景占據不同灰度級范圍的圖像[1]。它不僅可以極大的壓縮數據量,而且也大大簡化了分析和處理步驟,因此在很多情況下,是進行圖像分析、特徵提取與模式識別之前的必要的圖像預處理過程。圖像閾值化的目的是要按照灰度級,對像素集合進行一個劃分,得到的每個子集形成一個與現實景物相對應的區域,各個區域內部具有一致的屬性,而相鄰區域布局有這種一致屬性。這樣的劃分可以通過從灰度級出發選取一個或多個閾值來實現。
閾值分割法是一種基於區域的圖像分割技術,其基本原理是:通過設定不同的特徵閾值,把圖像像素點分為若干類.常用的特徵包括:直接來自原始圖像的灰度或彩色特徵;由原始灰度或彩色值變換得到的特徵.設原始圖像為f(x,y),按照一定的准則在f(x,y)中找到特徵值T,將圖像分割為兩個部分,分割後的圖像為
若取 :b0=0(黑),b1=1(白),即為我們通常所說的圖像二值化。
(原始圖像) (閾值分割後的二值化圖像)
一般意義下,閾值運算可以看作是對圖像中某點的灰度、該點的某種局部特性以及該點在圖像中的位置的一種函數,這種閾值函數可記作
T(x,y,N(x,y),f(x,y))
式中,f(x,y)是點(x,y)的灰度值;N(x,y)是點(x,y)的局部鄰域特性.根據對T的不同約束,可以得到3種不同類型的閾值[37],即
點相關的全局閾值T=T(f(x,y))
(只與點的灰度值有關)
區域相關的全局閾值T=T(N(x,y),f(x,y))
(與點的灰度值和該點的局部鄰域特徵有關)
局部閾值或動態閾值T=T(x,y,N(x,y),f(x,y))
(與點的位置、該點的灰度值和該點鄰域特徵有關)
圖像閾值化這個看似簡單的問題,在過去的四十年裡受到國內外學者的廣泛關注,產生了數以百計的閾值選取方法[2-9],但是遺憾的是,如同其他圖像分割演算法一樣,沒有一個現有方法對各種各樣的圖像都能得到令人滿意的結果,甚至也沒有一個理論指導我們選擇特定方法處理特定圖像。
所有這些閾值化方法,根據使用的是圖像的局部信息還是整體信息,可以分為上下文無關(non-contextual)方法(也叫做基於點(point-dependent)的方法)和上下文相關(contextual)方法(也叫做基於區域(region-dependent)的方法);根據對全圖使用統一閾值還是對不同區域使用不同閾值,可以分為全局閾值方法(global thresholding)和局部閾值方法(local thresholding,也叫做自適應閾值方法adaptive thresholding);另外,還可以分為雙閾值方法(bilever thresholding)和多閾值方法(multithresholding)
本文分三大類對閾值選取技術進行綜述:
1) 基於點的全局閾值方法;
2) 基於區域的全局閾值方法
3) 局部閾值方法和多閾值方法
3.基於點的全局閾值選取方法
3.1 p-分位數法
1962年Doyle[10]提出的p-分位數法(也稱p-tile法)可以說是最古老的一種閾值選取方法。該方法使目標或背景的像素比例等於其先驗概率來設定閾值,簡單高效,但是對於先驗概率難於估計的圖像卻無能為力。
例如,根據先驗知識,知道圖像目標與背景象素的比例為PO/PB,則可根據此條件直接在圖像直方圖上找到合適的閾值T,使得f(x,y)>=T的象素為目標,f(x,y)<T的象素為背景。
3.2 迭代方法選取閾值[11]
初始閾值選取為圖像的平均灰度T0,然後用T0將圖像的象素點分作兩部分,計算兩部分各自的平均灰度,小於T0的部分為TA,大於T0的部分為TB
計算 ,將T1 作為新的全局閾值代替T0,重復以上過程,如此迭代,直至TK 收斂,即TK+1 =TK
經試驗比較,對於直方圖雙峰明顯,谷底較深的圖像,迭代方法可以較快地獲得滿意結果。但是對於直方圖雙峰不明顯,或圖像目標和背景比例差異懸殊,迭代法所選取的閾值不如最大類間方差法。
3.3 直方圖凹面分析法
從直觀上說,圖像直方圖雙峰之間的谷底,應該是比較合理的圖像分割閾值,但是實際的直方圖是離散的,往往十分粗糙、參差不齊,特別是當有雜訊干擾時,有可能形成多個谷底。從而難以用既定的演算法,實現對不同類型圖像直方圖谷底的搜索。
Rosenfeld和Torre[12]提出可以構造一個包含直方圖 的最小凸多邊形 ,由集差 確定 的凹面。若 和 分別表示 與 在灰度級之處的高度,則 取局部極大值時所對應的灰度級可以作為閾值。也有人使用低通濾波的方法平滑直方圖,但是濾波尺度的選擇並不容易[13]。
但此方法仍然容易受到雜訊干擾,對不同類型的圖像,表現出不同的分割效果。往往容易得到假的谷底。但此方法對某些只有單峰直方圖的圖像,也可以作出分割。如:
3.4 最大類間方差法
由Otsu[14]於1978年提出的最大類間方差法以其計算簡單、穩定有效,一直廣為使用。從模式識別的角度看,最佳閾值應當產生最佳的目標類與北京類的分離性能,此性能我們用類別方差來表徵,為此引入類內方差 、類間方差 和總體方差 ,並定義三個等效的准則測量:
, , . (3)
鑒於計算量的考量,人們一般通過優化第三個准則獲取閾值。此方法也有其缺陷,kittler和Illingworth[15]的實驗揭示:當圖像中目標與背景的大小之比很小時方法失效。
在實際運用中,往往使用以下簡化計算公式:
(T) = WA(μa-μ)2 + Wb(μb-μ)2
其中, 為兩類間最大方差,WA 為A類概率,μa為A類平均灰度,Wb 為B類概率,μb為B類平均灰度,μ為圖像總體平均灰度。
即閾值T將圖像分成A,B兩部分,使得兩類總方差 (T)取最大值的T,即為最佳分割閾值。
3.5 熵方法
八十年代以來,許多學者將Shannon信息熵的概念應用於圖像閾值化,其基本思想都是利用圖像的灰度分布密度函數定義圖像的信息熵,根據假設的不同或視角的不同提出不同的熵准則,最後通過優化該准則得到閾值。Pun[16]通過使後驗熵的上限最大來確定閾值。Kapur等人[17]的方法假定目標和背景服從兩個不同的概率分布 和 定義
(4)
使得熵
(5)
達到最大求得最佳閾值。
此方法又稱為KSW熵方法。
3.6 最小誤差閾值
此方法來源於Bayes最小誤差分類方法。
Eb(T)是目標類錯分到背景類的概率,Eo(T)是背景類錯分到目標類的概率
總的誤差概率 E(T) = Eb(T) + Eo(T)
使E(T)取最小值,即為最優分類方法。
在Kittler和Illingworth[18]於1986年提出的最小誤差法中,直方圖被視為目標與背景混合集概率密度函數 的估計
(9)
其中, 為先驗概率, ,求解下列方程可得到Bayes最小誤差閾值
(10)
遺憾的是上式中 , 和 通常是未知的,Nakagawa和Rosenfeld[19]提倡用擬合方法從直方圖中估計這些參數,但是演算法相當復雜,不易實現。
3.7 矩量保持法
矩量保持(moment-preserving)法[20] ,即矩守恆閾值法,是1985年提出的,其基本思想是最佳的閾值應該使分割前後圖像的矩量保持不變,由此可以得到一組矩量保持方程,求解該方程組就可以得到最佳閾值。
3.8 模糊集方法
模糊集理論較好的描述了人類視覺中的模糊性和隨機性,因此在圖像閾值化領域受到了廣泛的關注。模糊集閾值化方法的基本思想是,選擇一種S狀的隸屬度函數定義模糊集,隸屬度為0.5的灰度級對應了閾值,當然在上述隸屬度函數的表達式中閾值是一個未知的參數;然後在此模糊集上定義某種准則函數(例如整個圖像的總體模糊度),通過優化准則函數來確定最佳閾值。
Pal等[21]首先,他們把一幅具有 個灰度級的 圖像看作一個模糊集 ,其中隸屬函數 定義如下:
(11)
參數 稱之為交叉點(即 )。由此從圖像 的空間 平面得到模糊特性 平面。然後,基於此模糊集定義了圖像的線性模糊度 、二次模糊度 和模糊熵 ,使這三個量取最小值時的交叉點 即為最佳閾值。
文獻[21]指出模糊隸屬度函數在該演算法中的作用僅在於將圖像由灰度數據空間轉換為模糊空間 ,其函數的形式對增強結果幾乎沒有影響。這就使我們有理由使用一些形式簡單的函數形式。例如國內學者發表的一種模糊閾值方法[22]:
隸屬度μ(x)表示灰度x具有明亮特性的程度,c為隸屬函數窗寬,q對應隸屬度為0.5的灰度級。設灰度級 的模糊率為:
= min{μ(l),1-μ(l)}
則得到整幅圖像的模糊率[44]
其中,MN為圖像尺寸,L為圖像總灰度級, 圖像中灰度為 的象素個數。
對應於不同的q值,就可以計算出相應的圖像模糊率,選取使得 最小的q值,作為圖像分割的最佳閾值即可。
3.9 小結
對於基於點的全局閾值選取方法,除上述主要幾種之外還許多,但大多都是以上述基本方法為基礎,做出的改進方法或者對演算法的優化,如使用遞推方法以降低演算法復雜性。
例如在文獻[42]中,提出一種使目標和背景差距最大的閾值求取方法,類似於最大類間方差閾值法。是它的一種簡化演算法。
又如1984年Dunn等人[23]提出了均勻化誤差閾值選取方法,這種方法實質上是要使將背景點誤分為目標點的概率等於將目標點誤分為背景點的概率。類似於最小誤差閾值法。
近年來有一些新的研究手段被引入到閾值選取中。比如人工智慧,在文獻[24] 中,描述了如何用人工智慧的方法,尋找直方圖的谷底點,作為全局閾值分割。其它如神經網路,數學形態學[39][46],小波分析與變換[40]等等。
總的來說,基於點的全局閾值演算法,與其它幾大類方法相比,演算法時間復雜度較低,易於實現,適合應用於在線實時圖像處理系統。由於我的研究方向為機器視覺,所作的項目要求演算法具有良好的實時性,因此針對基於點的全局閾值方法,閱讀了較多的文獻,在綜述里敘述也相對比較詳細。
4 基於區域的全局閾值選取方法
對一幅圖像而言,不同的區域,比如說目標區域或背景區域,同一區域內的象素,在位置和灰度級上同時具有較強的一致性和相關性。
而在上述基於點的全局閾值選取方法中,有一個共同的弊病,那就是它們實際上只考慮了直方圖提供的灰度級信息,而忽略了圖像的空間位置細節,其結果就是它們對於最佳閾值並不是反映在直方圖的谷點的情況會束手無策,不幸我們通常遇到的很多圖像恰恰是這種情況。另一方面,完全不同的兩幅圖片卻可以有相同的直方圖,所以即使對於峰谷明顯的情況,這些方法也不能保證你得到合理的閾值。於是,人們又提出了很多基於空間信息的閾值化方法。
可以說,局域區域的全局閾值選取方法,是基於點的方法,再加上考慮點領域內象素相關性質組合而成,所以某些方法常稱為「二維xxx方法」。由於考慮了象素領域的相關性質,因此對雜訊有一定抑止作用[41]。
4.1 二維熵閾值分割方法[25]
使用灰度級-局域平均灰度級形成的二維灰度直方圖[43]進行閾值選取,這樣就得到二維熵閾值化方法。
(二維灰度直方圖: 灰度-領域平均灰度)
如圖,在0區和1區,象素的灰度值與領域平均灰度值接近,說明一致性和相關性較強,應該大致屬於目標或背景區域;2區和3區一致性和相關性較弱,可以理解為雜訊或邊界部分。二維熵閾值分割,就是選擇(S,T)對,使得目標類和背景類的後驗熵最大。(具體方法是一維熵閾值分割的推廣,可參見上一節)
Abutaleb[26],和Pal]結合Kapur]和Kirby的方法,分別提出了各自的二維熵閾值化方法,其准則函數都是使目標熵和背景熵之和最大化。Brink[27]的方法則是使這兩者中的較小者最大化,該方法的計算復雜度為 ,後來有人改進為遞推快速演算法將時間復雜度降為 (其中 為最大灰度級數)。
4.2 簡單統計法
Kittler等人[28],[29]提出一種基於簡單的圖像統計的閾值選取方法。使用這種方法,閾值可以直接計算得到,從而避免了分析灰度直方圖,也不涉及准則函數的優化。該方法的計算公式為
(19)
其中,
因為e(x,y)表徵了點(x,y)領域的性質,因此本方法也屬於基於區域的全局閾值法。
4.3 直方圖變化法
從理論上說,直方圖的谷底是非常理想的分割閾值,然後在實際應用中,圖像常常受到雜訊等的影響而使其直方圖上原本分離的峰之間的谷底被填充,或者目標和背景的峰相距很近或者大小差不多,要檢測他們的谷底就很難了。
在上一節基於點的全局閾值方法中,我們知道直方圖凹面分析法的弊病是容易受到雜訊干擾,對不同類型的圖像,表現出不同的分割效果。往往容易得到假的谷底。這是由於原始的直方圖是離散的,而且含雜訊,沒有考慮利用象素領域性質。
而直方圖變化法,就是利用一些象素領域的局部性質變換原始的直方圖為一個新的直方圖。這個新的直方圖與原始直方圖相比,或者峰之間的谷底更深,或者谷轉變成峰從而更易於檢測。這里的象素領域局部性質,在很多方法中經常用的是象素的梯度值。
例如,由於目標區的象素具有一定的一致性和相關性,因此梯度值應該較小,背景區也類似。而邊界區域或者雜訊,就具有較大的梯度值。最簡單的直方圖變換方法,就是根據梯度值加權,梯度值小的象素權加大,梯度值大的象素權減小。這樣,就可以使直方圖的雙峰更加突起,谷底更加凹陷。
4.4 其它基於區域的全局閾值法
鬆弛法利用鄰域約束條件迭代改進線性方程系統的收斂特性,當用於圖像閾值化時其思想是:首先根據灰度級按概率將像素分為「亮」和「暗」兩類,然後按照領域像素的概率調整每個像素的概率,調整過程迭代進行,使得屬於亮(暗)區域的像素「亮(暗)」的概率變得更大。
其它還有許多方法利用灰度值和梯度值散射圖,或者利用灰度值和平均灰度值散射圖。
5 局部閾值法和多閾值法
5.1 局部閾值(動態閾值)
當圖像中有如下一些情況:有陰影,照度不均勻,各處的對比度不同,突發雜訊,背景灰度變化等,如果只用一個固定的全局閾值對整幅圖像進行分割,則由於不能兼顧圖像各處的情況而使分割效果受到影響。有一種解決辦法就是用與象素位置相關的一組閾值(即閾值使坐標的函數)來對圖像各部分分別進行分割。這種與坐標相關的閾值也叫動態閾值,此方法也叫變化閾值法,或自適應閾值法。這類演算法的時間復雜性可空間復雜性比較大,但是抗噪能力強,對一些用全局閾值不易分割的圖像有較好的效果。
例如,一幅照度不均(左邊亮右邊暗)的原始圖像為:
如果只選擇一個全局閾值進行分割,那麼將出現下面兩種情況,都不能得到滿意的效果。
(閾值低,對亮區效果好,則暗區差) (閾值高,對暗區效果好,則亮區差)
若使用局部閾值,則可分別在亮區和暗區選擇不同的閾值,使得整體分割效果較為理性。
(按兩個區域取局部閾值的分割結果)
進一步,若每個數字都用不同的局部閾值,則可達到更理想的分割效果。
5.1.1 閾值插值法
首先將圖像分解成系列子圖,由於子圖相對原圖很小,因此受陰影或對比度空間變化等帶來的問題的影響會比較小。然後對每個子圖計算一個局部閾值(此時的閾值可用任何一種固定閾值選取方法)。通過對這些子圖所得到的閾值進行插值,就可以得到對原圖中每個象素進行分割所需要的合理閾值。這里對應每個象素的閾值合起來構成的一個曲面,叫做閾值曲面。
5.1.2 水線閾值演算法
水線(也稱分水嶺或流域,watershed)閾值演算法可以看成是一種特殊的自適應迭代閾值方法,它的基本思想是:初始時,使用一個較大的閾值將兩個目標分開,但目標間的間隙很大;在減小閾值的過程中,兩個目標的邊界會相向擴張,它們接觸前所保留的最後像素集合就給出了目標間的最終邊界,此時也就得到了閾值。
5.1.3 其它的局部閾值法
文獻[30]提出了一種基於閾值曲面的二維遺傳演算法。遺傳演算法是基於進化論中自然選擇機理的、並行的、統計的隨機化搜索方法,所以在圖像處理中常用來確定分割閾值。
文獻[31] [32]中提出一種基於局部梯度最大值的插值方法。首先平滑圖像,並求得具有局部梯度最大值的像素點,然後利用這些像素點的位置和灰度在圖像上內插,得到灰度級閾值表面。
除此之外,典型的局部閾值方法還有White和Rohrer[33]的加權移動平均閾值方法,Perez和Gonzalez[34]的適用於非均勻照射下圖像的局部閾值方法以及Shio[35]的與照射無關的對比度度量閾值方法等。總的來說,這類演算法的時間和空間復雜度都較大,但是抗噪能力強,對一些使用全局閾值法不宜分割的圖像具有較好的效果。
5.2 多閾值法
很顯然,如果圖像中含有占據不同灰度級區域的幾個目標,則需要使用多個閾值才能將它們分開。其實多域值分割,可以看作單閾值分割的推廣,前面討論的大部分閾值化技術,諸如Otsu的最大類間方差法, Kapur的最大熵方法、矩量保持法和最小誤差法等等都可以推廣到多閾值的情形。以下介紹另外幾種多閾值方法。
5.2.1 基於小波的多域值方法。
小波變換的多解析度分析能力也可以用於直方圖分析[36],一種基於直方圖分析的多閾值選取方法思路如下:首先在粗解析度下,根據直方圖中獨立峰的個數確定分割區域的類數,這里要求獨立峰應該滿足三個條件:(1)具有一定的灰度范圍;(2)具有一定的峰下面積;(3)具有一定的峰谷差。然後,在相鄰峰之間確定最佳閾值,這一步可以利用多分辨的層次結構進行。首先在最低解析度一層進行,然後逐漸向高層推進,直到最高解析度。可以基於最小距離判據對在最低層選取的所有閾值逐層跟蹤,最後以最高解析度層的閾值為最佳閾值。
5.2.2 基於邊界點的遞歸多域值方法。
這是一種遞歸的多閾值方法。首先,將象素點分為邊界點和非邊界點兩類,邊界點再根據它們的鄰域的亮度分為較亮的邊界點和較暗的邊界點兩類,然後用這兩類邊界點分別作直方圖,取兩個直方圖中的最高峰多對應的灰度級作為閾值。接下去,再分別對灰度級高於和低於此閾值的像素點遞歸的使用這一方法,直至得到預定的閾值數。
5.2.3 均衡對比度遞歸多域值方法。
首先,對每一個可能閾值計算它對應於它的平均對比度
其中, 是閾值為 時圖像總的對比度, 是閾值 檢測到的邊界點的數目。然後,選擇 的直方圖上的峰值所對應的灰度級為最佳閾值。對於多閾值情形,首先用這種方法確定一個初始閾值,接著,去掉初始閾值檢測到的邊界點的貢獻再做一次 的直方圖,並依據新的直方圖選擇下一個閾值。這一過程可以這樣一直進行下去,直到任何閾值的最大平均對比度小於某個給定的限制為止。
6 閾值化演算法評價簡介
盡管人們在圖像分割方面做了許多研究工作,但由於尚無通用的分割理論,現已提出的分割演算法大都是針對具體問題的,並沒有一種適合於所有圖像的通用的分割演算法。另一方面,給定一個實際圖像分割問題要選擇合用的分割演算法也還沒有標準的方法。為解決這些問題需要研究對圖像分割的評價問題。分割評價是改進和提高現有演算法性能、改善分割質量和指導新演算法研究的重要手段。
然而,如同所有的圖像分割方法一樣,閾值化結果的評價是一個比較困難的問題。事實上對圖像分割本身還缺乏比較系統的精確的研究,因此對其評價則更差一些。人們先後已經提出了幾十個評價准則。這些准則中又有定性的,也有定量的;有分析演算法的,也有檢測實驗結果的,文獻[37]將它們大致分為13類。
文獻[4] 中選擇攝影師、建築物和模特三幅圖像作為標准圖像,並採用趨於一致性度量和形狀參數對幾種常用的全局閾值方法的分割結果進行了評價。結果表明對於這三幅圖像,如果希望得到的二值圖像比較均勻且目標的形狀較好,推薦使用最大熵方法、矩量保持方法和最大類間方差法。
文獻[38] 中以磁碟及鶴模型作標准圖像,在雜訊條件下用錯分概率、形狀和均勻性度量作為標准評估了五種常見的整體閾值選取方法的性能。這五種方法是四元樹方法、矩量保持法、最大類間方差法、最大熵方法和簡單統計法。結果表明各種方法的性能不僅與所處理的圖像有關,而且也和所選用的准則有關。該文獻也指出,對於一般實時應用來說,可以選擇最大類間方差方法和簡單統計法。
最後,評價的目的是為了能指導、改進和提高分割,如何把評價和分割應用聯系起來尚有許多工作要做。一個可能的方法是結合人工智慧技術,建立分割專家系統[45],以有效的利用評價結果進行歸納推理,從而把對圖像的分割由目前比較盲目的試驗階段推進到系統地實現的階段。
9. Heursure閾值演算法是什麼
rigrsure閾值,是一種基於Stein的無偏似然估計原理的自適應閾值選擇;
sqtwolog閾值,採用的是一種固定的閾值形式,它所產生的閾值為2log(length(x))
heursure閾值,是前兩種閾值法的綜合,所選擇的是最優預測變數閾值,當信噪比很小,閾值估計有很大雜訊時就需要採用這種固定的閾值形式
剛在寫論文,隨手粘貼過來。