日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阈值分割与区域分割

發布時間:2024/7/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阈值分割与区域分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要包括以下內容

  • 閾值分割技術
  • 基于區域的圖像分割技術
  • 本章的典型案例
    • 基于LoG和Canny算子的精確邊緣檢測
    • 基于Hough變換的直線檢測
    • 圖像的四叉樹分解

閾值分割

我們曾在3.5節學習過灰度閾值變換的相關知識, 利用灰度閾值變換分割圖像就稱為閾值分割, 它是一種基本的圖像分割方法。
闕值分割的基本思想是確定一個閾值, 然后把每個像素點的灰度值和閾值相比較,根據比較的結果把該像素劃分為兩類:前景或者背景,閾值分割可以分成以下3步:

  • 確定閾值.
  • 將閾值和像素比較,.
  • 把像素歸類

其中第1步閾值最重要。閾值的選擇將直接影響分割的準確性以及由此產生的圖像描述,分析的正確性。

閾值分割方法

閾值分割常用的方法一般有以下幾種。

實驗法
實驗法是通過人眼的觀察, 對已知某些特征的圖像, 只要試驗不同的閾值, 然后看是否滿足已知特征即可。這種方法的不足在于適用范圍窄,
使用前必須了解圖像的某些特征, 譬如平均灰度等,而且分割后圖像質量的好壞受主觀局限性很大。

根據直方圖谷底確定閾值
如果圖像的前景物體內部和背景區域的灰度值分布都比較均勻, 那么這個圖像的灰度直方圖將具有明顯雙峰, 此時可以選擇兩峰之間的谷底作為閾值。
其表達式為:

注意:由于直方圖是各灰度的像素統計,其峰值和谷底特性不一定代表目標和背景.因此,如果沒有圖像其他方面的知識,只靠直方圖進行圖像分割不一定準確 .

迭代選擇閾值法
迭代式閾值選擇方法的基本思想是:開始選擇一個閾值作為初始估計值,然后按照某種規則不斷地更新這一估計值,直到滿足給定的條件為止。這個過程的關鍵在于選擇怎么樣的 迭代規則。一個好的迭代規則必須既能夠快速收斂,又能夠在每一個迭代過程中產生優于上次迭代的結果。下面是一種迭代選擇閾值算法:
(1)選擇一個T的初始估計值。
(2)利用閾值T把圖像分為兩個區域R1, 和R2
(3)對區域R1和R2中的所有像素計算平均灰度值μ1和μ2
(4)計算新的閾值:

T=12(u1+u2)
(5)重復步驟2-4, 直到逐次迭代所得的T值小于事先定義的參數T。

最小均方誤差法
最小均方誤差法也是常用的閾值分割法之一。這種方法通常以圖像中的灰度為模式特征,假設各模式的灰度是獨立分布的隨機變量,并假設圖像中待分割的模式服從一定的概率分布。一般來說,采用的是正態分布,即高斯概率分布。
首先假設一幅圖像僅包含兩個主要的灰度區域前景和背景。令z表示灰度值,p(z)表示灰度值概率密度函數的估計值。假設概率密度函數一個對應于背景的灰度值,另一個對應于圖像中前景即對象的灰度值。則描述圖像中整體灰度變換的混合密度函數是:

p(z)=P1p1(z)+P2p2(z)
其中 P1是前景中具有值z的像素出現的概率, P2是背景中具有值z的像素出現的概率,兩者的關系為:
P1+P2=1

最大類間方差法
在對圖像進行閾值分割時,選定的分割閾值應使前景區域的平均灰度、背景區域的平均灰度與整幅圖像的平均灰度之間差別最大,這種差異用區域的方差來表示。由此,Otsu在1978年提出了最大方差法。該算法在判決分析最小二乘法原理的基礎上推導得出,計算過程簡單是一種穩定、常用的算法。

讓T在[O,L-1]范圍內依次取值, 使類間方差最大的T值便是最佳區域分割閾值。
該方法不需要人為設定其他參數,是一種自動選擇閾值的方法,而且能得到較好的結果。它不僅適用于包含兩個區域的單閾值選擇,也同樣適用于多區域的多閾值選擇。

Matlab實現

最大類間方差法
Matlab中和闕值變換相關的兩個主要函數是im2bw和graythresh。實際上,利用graythresh函數即可實現最大類間方差法。

迭代選擇閾值法

function [Ibw, thres] = autothreshold(I) % 迭代法自動閾值分割 % % 輸入:I - 要進行自動閾值分割的灰度圖像 % 輸出:Ibw - 分割后的二值圖像 % thres - 自動分割采用的閾值thres = 0.5 * (double(min(I(:))) + double(max(I(:)))); %初始閾值 done = false; %結束標志 while ~doneg = I >= thres;Tnext = 0.5 * (mean(I(g)) + mean(I(~g)));done = abs(thres - Tnext) < 0.5;thres = Tnext; end;Ibw = im2bw(I, thres/255); % 二值化

區域分割

前面所講的圖像分割方法都是基于像素的灰度來進行閾值分割, 本節將討論以區域為基礎的圖像分割技術。傳統的區域分割方法有區域生長和區域分裂與合井, 其中最基礎的是區域生長法。

區域生長及其實現

區域生長是根據事先定義的準則將像素或者子區域聚合成更大區域的過程。其基本思想是從一組生長點開始(生長點可以是單個像素,也可以為某個小區域),將與該生長點性質相似的相鄰像素或者區域與生長點合并,形成新的生長點,重復此過程直到不能生長為止。生長點和相鄰區域的相似性判據可以是灰度值、紋理、顏色等多種圖像信息。

區域生長算法
區域生長一般有3個步驟。
(1)選擇合適的生長點。
(2)確定相似性準則即生長準則。
(3)確定生長停止條件。
一般來說, 在無像素或者區域滿足加入生長區域的條件時, 區域生長就會停止。

上述方法比較的是單個像素與其鄰域的灰度特征以實現區域生長,也有一種混合型區域生長把圖像分割成若干小區域,比較相鄰小區域的相似性,如果相似則合并。在實際中,區 域生長時經常還要考慮到生長的”歷史”,還要根據區域的尺寸、形狀等圖像的全局性質來決定區域的合并。

matlab實現

function J = regionGrow(I) % 區域生長,需要以交互方式設定初始種子點,具體方法為鼠標單擊圖像中一點后,按下回車鍵 % % 輸入:I - 原圖像 % 輸出:J - 輸出圖像if isinteger(I)I=im2double(I); end figure,imshow(I),title('原始圖像') [M,N]=size(I); [y,x]=getpts; %獲得區域生長起始點 x1=round(x); %橫坐標取整 y1=round(y); %縱坐標取整 seed=I(x1,y1); %將生長起始點灰度值存入seed中 J=zeros(M,N); %作一個全零與原圖像等大的圖像矩陣J,作為輸出圖像矩陣 J(x1,y1)=1; %將J中與所取點相對應位置的點設置為白 sum=seed; %儲存符合區域生長條件的點的灰度值的和 suit=1; %儲存符合區域生長條件的點的個數 count=1; %記錄每次判斷一點周圍八點符合條件的新點的數目 threshold=0.15; %閾值,注意需要和double類型存儲的圖像相符合 while count>0s=0; %記錄判斷一點周圍八點時,符合條件的新點的灰度值之和count=0;for i=1:Mfor j=1:Nif J(i,j)==1if (i-1)>0 & (i+1)<(M+1) & (j-1)>0 & (j+1)<(N+1) %判斷此點是否為圖像邊界上的點for u= -1:1 %判斷點周圍八點是否符合閾值條件for v= -1:1if J(i+u,j+v)==0 & abs(I(i+u,j+v)-seed)<=threshold& 1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8J(i+u,j+v)=1;%判斷是否尚未標記,并且為符合閾值條件的點%符合以上兩條件即將其在J中與之位置對應的點設置為白count=count+1;s=s+I(i+u,j+v); %此點的灰度之加入s中endendendendendendendsuit=suit+count; %將n加入符合點數計數器中sum=sum+s; %將s加入符合點的灰度值總合中seed=sum/suit; %計算新的灰度平均值 end


選擇不同的生長點,結果不同。

區域分裂與合并

區域生長是從一組生長點開始的,另一種方法是在開始時將圖像分割為一系列任意不相交的區域, 然后將它們合并或者拆分以滿足限制條件, 這就是區域分裂與合并。 通過分裂, 可以將不同特征的區域分離開, 而通過合并, 可以將相同特征的區域合并起來。

區域分裂與合并算法


圖像先分裂為如圖9.22Ca)所示;第二次分裂時,如圖(b)所示,由于左下角區域滿足P(Ri)=TRUE,則不進行分裂操作;第三次分裂時,如圖(c)所示,僅僅右邊的突出部分 P(Ri)=FALSE, 需要進行分裂操作,其余不變,完成后,分裂停止;最后,對兩個相鄰區域 實行合并,一直得到最后的結果,如圖(d)所示。
區域分裂與合并對分割復雜的場景圖像比較有效,如果引入應用領域知識,則可以更好地提高分割效果。

區域分裂的Matlab實現
在Matlab中, 和區域分裂相關的3個主要函數分別是qtdecomp、qtgetblk和qtsetblk。

(1) qtdecomp函數
Matlab的IPT函數qtdecomp可以進行四叉樹分解。該函數首先將圖像劃分成相等大4的4塊,然后對每一個塊進行一致性檢查。如果該塊不符合一致性標準, 則將該塊繼續分為4塊; 否則不對其進行進一步的分割。這個過程將會一直重復直至每一個塊都符合一致性標
準, 分解的結果可能會包含許多大小不同的塊。
qtdecomp函數的常用調用形式為:
S = qtdecomp(I,threshold,[mindim,maxdim])

threshold是分割成的子塊中允許的閾值,默認值為0.如杲子塊中最大元素和最小元 素的差值小于該閾值就認為滿足一致性條件.對于double型矩陣,threshold將直接作為閾值;而對于uinit8和uintl6類型的矩陣,threshold將被乘以255和65535以作為實際閾值.對于圖像而言,threshold的取值范圍是0到1.

[mindim maxdim]是尺度閾值.mindim參數可以屏蔽函數對尺度上小于mindim的子塊的處理,而不論這個子塊是否滿足一致性條件;如果參數形式為[mindim maxdim], 則表示不產生小于mindim尺度的子塊,也不保留大于maxdim尺度的子塊,此時 maxdim/mindim必須是2的整數次冪

注意: qtdecomp函數主要適用于邊長是2的整數次冪的正方形圖像, 如128x128,512x512, 此時分解可一直進行至子塊大小為1x1。對于長寬不是2的整數次冪的圖像, 分解可能無法進行到底. 例如, 對于96x96
的圖像, 將首先分解為48x48, 然后是24x24, 12*12, 6*6, 最后是3x3, 無法再繼續分解. 此時必須指定mindim參數為3或是2的整數次幕與3的乘積.

(2) qtgetblk函數
在得到稀疏矩陣S后, 利用IPT函數qtgetblk可進一步獲得四叉樹分解后所有指定大小的子塊像素及位置信息。常用調用形式為:
[vals,r,c]=qtgetblk(I,S,dim)
稀疏矩陣S是經過qtdecomp函數處理的輸出結果.
dim是指定子塊的大小

vals是dim*dim*k的三維矩陣,包含I中所有符合條件的子塊數據。其中k為符合 條件的dim*dim的大小的子塊的個數,vals(:.:,i)表示符合條件的第i個子塊的內容.
r和c均為列向量,分別表示圖像I中符合條件子塊左上角的縱坐標(行索引)和橫坐標(列索引).

(3) qtsetblk函數
在將圖像劃分為子塊后, 還需要使用函數qtsetblk將四叉樹分解所得到的子塊中符合條件的部分全部替換為指定的子塊。函數語法為:
J = qtsetblk(I,S,dim,vals)
S是I經過qtdecomp函數處理的結果.
dim是指定的子塊大小.
vals是dim*dim*k的三維矩陣,包含了用來替換原有子塊的新子塊信息.其中K應為圖像I中大小為dim*dim的子塊的總數,vals(:,:,i)表示要替換的第i個子塊.

I1 = imread('rice.png');S = qtdecomp(I1,0.2); S2 = full(S);figure; subplot(1,2,1),imshow(I1); subplot(1,2,2),imshow(S2);ct = zeros(6,1); for ii = 1:6[vals{ii},r,c]=qtgetblk(I1,S2,2^(ii-1));ct(ii) = size(vals(ii),3); end

小結
圖像分割問題是一個十分困難的問題。因為分割后的圖像是系統目標的一個函數, 所以根本不存在理想的或正確的分割。
物體及其組成部件的二維表現形式受到光照條件、透視畸變、觀察點變化、遮擋等的影響。此外, 物體及其組成部件與背景之間在視覺上可能無法區分。因此, 人們無法預測能夠從圖像中抽取出哪些與物體識別相關的初始信息。
唯一可以肯定的是,這一過程將在本質上具有不可靠性。某些有用的信息能夠被抽取出,且同時也會出現許多錯誤。因此,在任何應用領域中都不存在最優解。分割結果的好壞或者正確與否, 目前還沒有一個統一的評價判斷標準, 大都從分割的視覺效果和實際的應用場景來判斷。

總結

以上是生活随笔為你收集整理的阈值分割与区域分割的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。