1. 程式人生 > >各種影象分割方法

各種影象分割方法

影象分割的方法

一.基於閾值的影象分割

1. 直方圖雙峰法(mode 法)

Prewitt 等人於六十年代中期提出的直方圖雙峰法(也稱 mode ) 是典型的全域性單閾值分割方法。該方法的基本思想是:假設影象中有明顯的目標和背景,則其灰度直方圖呈雙峰分佈,當灰度級直方圖具有雙峰特性時,選取兩峰之間的谷對應的灰度級作為閾值。如果背景的灰度值在整個影象中可以合理地看作為恆定,而且所有物體與背景都具有幾乎相同的對比度,那麼,選擇一個正確的、固定的全域性閾值會有較好的效果。例如圖4.1所示:

4.1原始灰度影象

4.2灰度直方圖

選定閾值M100

演算法實現:找到第一個峰值和第二個峰值,

再找到第一和第二個峰值之間的谷值,谷值就是那個閥值了。

2. 固定閾值分割

就是設定一個固定的值,畫素灰度大於就該畫素程式設計0或者255或者其他的,小於的又等於什麼的。

for(int i = 0; i < nWidth; ++i)

{

for(int j = 0; j < nHigh; ++j)

{

if(Image[i][j] >= 閾值)

{

Image[i][j] = 255;

}

else

{

Image[i][j] = 0;

}

}

}

這個閾值選什麼值呢, 1中的雙峰法就是一個閾值產生的方法。

3. 半閾值分割

for (j=0;j<height;j++)

{

for(i=0;i<wide;i++)

{

lpSrc=p_data+wide*j+i;

lpDst=temp+wide*j+i;

if((*lpSrc - 閾值) < 30)

*lpDst=*lpSrc;

else

*lpDst = 255;

}

}

不知道為什麼這麼做,為什麼這樣就叫做半閾值?

4. 迭代閾值影象分割

http://topic.csdn.net/u/20080402/10/d3cb6789-fa60-4758-b232-7a89926f07b9.html

迭代法是基於逼近的思想,其步驟如下:

1求出圖象的最大灰度值和最小灰度值,分別記為ZMAX

ZMIN,令初始閾值T0=(ZMAX+ZMIN)/2

2根據閾值TK將圖象分割為前景和背景,分別求出兩者的平均灰度值ZOZB

3求出新閾值TK+1=(ZO+ZB)/2

4TK==TK+1,則所得即為閾值;否則轉2,迭代計算。

我想問下,ZOZB怎麼求??

1. 統計影象灰度直方圖

2. 找到最大灰度值ZMAX和最小灰度值ZMIN,並計算T0 =(ZMAX+ZMIN)/2

3. 計算小於T0的所有灰度的均值ZO和大於T0的所有灰度的均值ZB(用直方圖求就可以)。

例如,你的直方圖從10250有值,則T0 = 260/2 = 130.

ZO = Sum(nHist[i] * i) / Sum(nHist[i]); 10 <= i <= 130

BO = Sum(nHist[i] * i) / Sum(nHist[i]); 131 <= i <= 250

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ZO = .0, ZB = .0;

int nB = 0, nO = 0;

BYTE bytVal = 0;

while( 還有影象資料沒讀完 )

{

bytVal = ReadNextPixel();

if( bytVal > T0 )

{

ZB += bytVal;

++nB;

}

else

{

ZO += bytVal;

++nO;

}

}

ZO /= nO;

ZB /= nB;

//////////////////////////////////////////////////////////////////////////////////////////////////////////

虛擬碼1

A.找到灰度圖中最大灰度nZmax和最小灰度nZmin(程式碼略)

B.T0

T0 = (nZmax + nZmin) / 2;

C. 迭代了求出閾值

int i;

while (true)

{

// 計算下一個迭代閥值

for (i = 0; i < T0 + 1; i++)

{

Temp0 += tongji[i] * i;

Temp1 += tongji[i];

}

for (i = T0 + 1; i < 256; i++)

{

Temp2 += tongji[i] * i;

Temp3 += tongji[i];

}

// (大於T0的灰度均值 + 小於T0的灰度均值) / 2

T2 = (Temp0 / Temp1 + Temp2 / Temp3) / 2;

// 看迭代結果是否已收斂

if (T0 == T2)

break;

else

T0 = T2;

}

D. 根據上一步求到的T2閾值進行影象分割

// 對各畫素進行灰度轉換

for (j = 0; j < height; j ++)

{

for (i = 0; i < wide; i ++)

{

// 讀取畫素

unsigned char temp = *((unsigned char *)p_data + wide * j + i);

// 判斷畫素灰度值是否超出範圍

if (temp < T0)

temp = 0;

else

temp = 255;

// 回寫處理完的畫素

*((unsigned char *)p_data + wide * j + i) = temp;

}

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////

虛擬碼2

C.找到灰度圖中最大灰度iMaxGrayValue和最小灰度iMinGrayValue (程式碼略)

D.iNewThreshold

iNewThreshold = (iMaxGrayValue + iMinGrayValue) / 2;

C. 迭代了求出閾值

//迭代求最佳閾值

iNewThreshold = (iMinGrayValue + iMaxGrayValue)/2;

iThreshold = 0;

for(iIterationTimes = 0; iThreshold != iNewThreshold && iIterationTimes < 100;iIterationTimes ++)

{

iThreshold = iNewThreshold;

lP1 =0;

lP2 =0;

lS1 = 0;

lS2 = 0;

//求兩個區域的灰度平均值

for (i = iMinGrayValue;i < iThreshold;i++)

{

lP1 += lHistogram[i]*i;

lS1 += lHistogram[i];

}

iMean1GrayValue = (unsigned char)(lP1 / lS1);

for (i = iThreshold+1;i < iMaxGrayValue;i++)

{

lP2 += lHistogram[i]*i;

lS2 += lHistogram[i];

}

iMean2GrayValue = (unsigned char)(lP2 / lS2);

iNewThreshold =(iMean1GrayValue + iMean2GrayValue)/2;

}

// 這裡限制的迭代次數不大於100,考慮到效率吧。

D. 根據上一步求到的iNewThreshold閾值進行影象分割

//根據閾值將影象二值化

for (i = 0;i < lHeight ;i++)

{

for(j = 0;j < lWidth ;j++)

{

// 指向源影象倒數第j行,第i個象素的指標

lpSrc = (char *)lpDIBBits + lLineBytes *i + j;

// 指向目標影象倒數第j行,第i個象素的指標

lpDst = (char *)lpNewDIBBits + lLineBytes *i + j;

pixel = (unsigned char)*lpSrc;

if(pixel <= iThreshold)

{

*lpDst = (unsigned char)0;

}

else

{

*lpDst = (unsigned char)255;

}

}

}

5. 自適應閾值影象分割

在許多情況下,物體和背景的對比度在圖象中不是各處一樣的,這時很難用統一的一個閾值將物體與背景分開。這時可以根據圖象的區域性特徵分別採用不同的閾值進行分割。實際處理時,需要按照具體問題將圖象分成若干子區域分別選擇閾值,或者動態地根據一定的鄰域範圍選擇每點處的閾值,進行圖象分割。

1). 大津法(OTSU)

最大類間方差法是由日本學者大津於1979年提出的,是一種自適應的閾值確定的方法,又叫大津

,簡稱OTSU它是按影象的灰度特性,將影象分成背景和目標2部分。背景和目標之間的類間方差

越大,說明構成影象的2部分的差別越大,當部分目標錯分為背景或部分背景錯分為目標都會導致2

分差別變小。因此,使類間方差最大的分割意味著錯分概率最小。

對於影象I(x,y),前景(即目標)和背景的分割閾值記作T, 屬於前景的畫素點數佔整幅影象的比例記為ω0,其平均灰度μ0;背景畫素點數佔整幅影象的比例為ω1,其平均灰度為μ1。影象的總平均灰度記為μ,類間方差記為g

假設影象的背景較暗,並且影象的大小為M×N,

影象中畫素的灰度值小於閾值T的畫素個數記作N0,畫素灰度大於閾值T的畫素個數記作N1,則有:

      ω0 = N0/ M×N(1)

      ω1 = N1/ M×N(2)

N0 + N1 = M×N(3)

      ω0 + ω1 = 1(4)

相關推薦

各種影象分割方法

影象分割的方法 一.基於閾值的影象分割 1. 直方圖雙峰法(mode 法) Prewitt 等人於六十年代中期提出的直方圖雙峰法(也稱 mode 法) 是典型的全域性單閾值分割方法。該方法的基本思想是:假設影象中有明顯的目標和背景,則其灰度直方圖呈雙峰分佈,當灰度級

影象分割方法及效能評價綜述

摘 要 對醫學影象分割演算法的客觀評價是推進演算法在臨床上得到應用的關鍵。針對目前對醫學影象分割方法的研究較多,而對分割演算法的評價方法的研究卻很少的問題,提出了一種判斷和比較醫學影象分割演算法優劣的評價方法。首先對現有的幾種評價方法進行了綜述,並總結出了一套評價系統。可

計算機視覺之目標檢測及影象分割方法

1.目標檢測 現在的目標檢測方法主要分為三類: (1)基於傳統手工特徵的目標檢測方法 (2)基於RCNN的目標檢測方法 代表演算法有RCNN,SPP-Net, Fast-RCNN,Faster-RCNN (3)基於CNN迴歸的目標檢測方法 代表演算法

基於譜聚類的影象分割方法簡介

影象分割演算法有幾種:                 基於區域劃分方法。                 基於邊界劃分方法。常用的是邊緣檢測方法,優點是準確定位邊緣、運算速度快;缺點是不能保證邊緣的連續性和封閉性。                 基於閾值劃分方法。  

【OpenCV學習筆記 023】兩種影象分割方法比較

此次研究兩種影象分割法,分別是基於形態學的分水嶺演算法和基於圖割理論的GrabCut演算法。OpenCV均提供了兩張演算法或其變種。鑑於研究所需,記錄一些知識點,開發平臺為OpenCV2.4.9+Qt5.3.2。 一、使用分水嶺演算法進行影象分割 分水嶺變換是一種常用的影象處理演算法,在網上很容易搜到詳細

影象分割方法綜述

幾何活動輪廓模型以曲線演化理論以及水平集方法為基礎,曲線的演化僅依賴於其內在幾何特性,而獨立於曲線的引數。由於採用水平集方法隱式的表示曲線,使得其能夠靈活地處理曲線的拓撲變化。幾何活動輪廓模型又可分為基於邊界的活動輪廓模型、基於區域的活動輪廓模型。基於邊界的活動輪廓模型主要依賴影象的邊緣資訊控制曲線的運動速度

基於opencv的Niblack二值化演算法--影象分割方法

Niblack演算法是比較出名的二值化演算法,網上很多Niblack程式碼是基於Matlab的,本人覺得其速度比較慢,所以便基於OpenCV改寫了其演算法,具體參考的部落格連結已經忘記了,希望博主原諒。如果缺少某些函式,比如最大值最小值函式,可以參考本人其他部落格,裡面會提供

基於分塊技術的影象分割方法

譜聚類時間複雜度和空間複雜度分別是 O(n3)和 O(n2),為了減少譜聚類的計算量,主要的方法有:減少需要計算的頂點數和邊數方法,降維。 D. Yan, L. Huang and M. I. Jordan. Fast approximate spectral cluste

區域生長和區域分離與合併的影象分割方法

最近在學習影象分割的方法,所以對區域生長與區域分離與合併的影象分割方法進行一下總結。 首先說一下兩者的不同。區域生長是根據預先定義的生長準則來把畫素或子區域集合成較大區域的處理方法。區域生長是先給定影

基於圖的影象分割方法(Graph-Based Image Segmentation)原始碼閱讀筆記

這個方法被應用於深度學習目標檢測的經典之作selective search方法中(Selective Search for Object Recognition),用於初始化分割區域。。論文題目:《Efficient Graph-Based Image Segm

影象分割:1.基於閾值的影象分割方法(最大熵值分割法)

 利用影象熵為準則進行影象分割有一定歷史了,學者們提出了許多以影象熵為基礎進行影象分割的方法。我們介紹一種由Kapuret al提出來,現在仍然使用較廣的一種影象熵分割方法。 給定一個特定的閾值q(0<=q<K-1),對於該閾值所分割的兩個影象區域C0,C1,其估

影象分割-傳統方法

所謂影象分割指的是根據灰度、顏色、紋理和形狀等特徵把影象劃分成若干互不交迭的區域,並使這些特徵在同一區域內呈現出相似性,而在不同區域間呈現出明顯的差異性。 多數的影象分割演算法均是基於灰度值的不連續和相似的性質。 1、基於閾值的分割方法     &

【計算機視覺必讀乾貨】影象分類、定位、檢測,語義分割和例項分割方法梳理

文章來源:新智元 作者:張皓 【導讀】本文作者來自南京大學計算機系機器學習與資料探勘所(LAMDA),本文直觀系統地梳理了深度學習在計算機視覺領域四大基本任務中的應用,包括影象分類、定位、檢測、語義分割和例項分割。 本文旨在介紹深度學習在計算機視覺領域四大基本任務中的應用,包括分類(圖

影象分割綜述【深度學習方法

CNN影象語義分割基本上是這個套路: 下采樣+上取樣:Convlution + Deconvlution/Resize 多尺度特徵融合:特徵逐點相加/特徵channel維度拼接 獲得畫素級別的segement map:對每一個畫素點進行判斷類別 即使是更復雜的DeepL

影象處理-閾值分割方法彙總

文章目錄 基本概念 類別劃分 基本概念 影象閾值分割是影象處理中最基本也是最常用的方法之一,主要用於將影象中的畫素點劃分為兩個或者多個類別,從而得到便於處理的目標物件。 類別劃分 按照閾值作用範圍分:全域性閾值分割

HEVC中的影象的分塊分割方法

區塊是另一種區域分割方法,某個區塊必須為矩形,由整數個CTU組成。對於條帶和區塊,或者所有同一個條帶的CTU均屬於一個區塊,或者同屬於一個區塊的CTU均屬於一個條帶;類似的,或者同屬於一個條帶片段的CTU需屬於一個區塊,或者同屬於一個區塊的CTU必須屬於同一個條帶片段。下圖是某一幀分割成左右兩個區塊的示例圖

影象分割評價標準VO&DC的計算方法

1.DC   Dice Coefficient 2.VO   Volume Overlap      The number of voxels in the intersection of segmentation and reference, divided by th

深度學習(4)——強度非均勻性下影象分割的水平集方法及其在MRI中的應用(上)

強度非均勻性下影象分割的水平集方法及其在MRI中的應用 摘要 強度不均勻性經常出現在真實世界的影象中,這對影象分割提出了相當大的挑戰。最廣泛使用的影象分割演算法是基於區域並且通常依賴於感興趣區域中影象強度的均勻性,這通常由於強度不均勻性而不能提供準確

影象分割:閾值獲取方法總結

1. 計算0~255各灰階對應的畫素個數,儲存至一個數組中,該陣列下標是灰度值,儲存內容是當前灰度值對應畫素數 2. 計算背景影象的平均灰度、背景影象畫素數所佔比例 3. 計算前景影象的平均灰度、前景影象畫素數所佔比例 4. 遍歷0~255各灰階,計算並尋找類間方差極大值

深度學習:影象分類,定位檢測,語義分割,例項分割方法

計算機視覺領域四大基本任務中的應用,包括分類(圖a)、定位、檢測(圖b)、語義分割(圖c)、和例項分割(圖d)。 一、影象分類(image classification) 給定一張輸入影象,影象分類任務旨在判斷該影象所屬類別。 (1) 影象分類常用資料集 以下