OTSU閾值分割

2022-09-24 03:09:06 字數 1461 閱讀 2999

在計算機視覺中我們常常關注的目標特徵是顏色和灰度,刻畫影象中的兩個區域視覺相似性有許多方法,如形狀描繪子,顏色特徵,距特徵等。對於某種場景下的應用,具有獨特的紋理物件可以使用乙個很好的紋理特徵符。針對顏色不同的區域中的單體物件相同的擴充套件,我們可以使用顏色特徵來測量物件的不用部分的相似性。如果物體各個子區域存在單一的顏色分布,我們可以使用顏色特徵來測量物件不同部分的相似性。如果物體各個子區域存在單一的顏色分布,我們可以使用顏色特徵來測量物體的不同區域的相似性概率。

分水嶺分割演算法的實現途徑有多種,本節是利用影象距離變換來實現的,具體思路為:首先,對源影象進行灰度化,並使用otsu進行二值化操作;其次,對二值化影象進行形態學開操作,利用distancetransform完成影象距離變換操作;最後,歸一化距離變換的統計影象,並計算相應的連通區域分割塊:

示例**如下:

mat watershedsegment(mat & srcimage, int & noofsegments)

分水嶺分割合併:

由色度圖像可以看出,顏色在分水嶺分割的不同區域擴充套件在相同的目標物體內是相似的,圖7-2使用了色度飽和度直方圖來提取影象的每個區域,並測量了其巴特查里亞距離用於其距離相似性測量。巴特查里亞距離測量是兩個分離或連續區域部分概率分布的相似性,當距離測量距離很小時,兩個區域將被合併成單個部分,當影象的過分割現象明顯時,這種合併可重複進行。分水嶺分割合併首先計算分割部分的畫素歸屬,利用直方圖資訊統計相關特徵,對每個分割部分統計直方圖對比的相似性,然後根據相似性判斷分割的兩個部分是否需要合併成乙個區域。

示例**如下:

void segmerge(mat & image, mat & segments, int & numseg)

// 統計每乙個部分

for (int i = 0; i < segments.rows; i++)//segments分割好的影象

; // hue 變換範圍 0 to 256, saturation 變換範圍0 to 180

float h_ranges = ;

float s_ranges = ;

const float* ranges = ;

// 使用第0與1通道

int channels = ;

// 直方圖生成

ma*** hist_base;

for (int c = 1; c < numseg; c++)//為每一段生成直方圖

else

hist_base.release();

} double similarity = 0;

vector mearged;

for (int k = 0; k < hist_bases.size(); k++)

// 統計每乙個部分的直方圖相似

for (int c = 0; c0 && hist_bases[q].dims>0)

} }}

} }} }

} numseg = newnumseg;

}

otsu閾值分割演算法原理 閾值分割 Otsu法

演算法實現 不呼叫函式 include include using namespace std using namespace cv 實現灰度直方圖的繪製 void drawpicture mat inpicture,mat outpicture ma hist const int bins 256...

OTSU閾值分割

otsu演算法 1 原理 對於影象i x,y 前景 即目標 和背景的分割閾值記作t,屬於前景的畫素點數占整幅影象的比例記為 0,其平均灰度 0 背景畫素點數占整幅影象的比例為 1,其平均灰度為 1。影象的總平均灰度記為 類間方差記為g。假設影象的背景較暗,並且影象的大小為m n,影象中畫素的灰度值小...

OTSU演算法 三通道閾值分割

依據畫素值的權重,分離影象前景和背景。關鍵之處是處理畫素值的權重佔比 otsu algorithm int otsu const mat src pixel gray value count for int i 0 i height i sum0 前景的灰度總和 sum1 背景灰度總和 cnt0 前...