opencv的二值化操作中,有一種「大津閾值處理」的方法,使用函式cvthreshold(image,image2,0,255,cv_thresh_otsu) 實現,該函式就會使用大律法otsu得到的全域性自適應閾值來進行二值化,而引數中的threshold不再起作用。
otsu演算法
otsu演算法也稱最大類間差法,有時也稱之為大津演算法,由大津於2023年提出,被認為是影象分割中閾值選取的最佳演算法,計算簡單,不受影象亮度和對比度的影響,因此在數字影象處理上得到了廣泛的應用。它是按影象的灰度特性,將影象分成背景和前景兩部分。因方差是灰度分布均勻性的一種度量,背景和前景之間的類間方差越大,說明構成影象的兩部分的差別越大,當部分前景錯分為背景或部分背景錯分為前景都會導致兩部分差別變小。因此,使類間方差最大的分割意味著錯分概率最小。
設灰度影象灰度級是l,則灰度範圍為[0,l-1],利用otsu演算法計算影象的最佳閾值為:
t = max[w0(t) * (u0(t) - u)^2 + w1(t) * (u1(t) - u)^2)]
其中的變數說明:當分割的閾值為t時,w0為背景比例,u0為背景均值,w1為前景比例,u1為前景均值,u為整幅影象的均值。
使以上表示式值最大的t,即為分割影象的最佳閾值。
以下是一段在opencv中實現的c語言程式,即乙個使用otsu演算法提取影象閾值的函式,輸入引數為乙個影象指標,返回分割該影象的最佳閾值。
其中的變數說明:當分割的閾值為t時
w0為背景畫素點佔整幅影象的比例
u0為w0平均灰度
w1為前景畫素點佔整幅影象的比例
u1為w1平均灰度
u為整幅影象的平均灰度
公式:g = w0*pow((u-u0),2) + w1*pow((u-u1),2)
int myautofocusdll::otsuthreshold(iplimage *frame)
//統計灰度級中每個畫素在整幅影象中的個數
for(i = 0; i < height; i++)
} //計算每個畫素在整幅影象中的比例
float maxpro = 0.0;
int kk=0;
for(i = 0; i < grayscale; i++)
} //遍歷灰度級[0,255]
float w0, w1, u0tmp, u1tmp, u0, u1, u, deltatmp, deltamax = 0;
for(i = 0; i < grayscale; i++) // i作為閾值
else //前景部分
} u0 = u0tmp / w0;
u1 = u1tmp / w1;
u = u0tmp + u1tmp;
deltatmp = w0 * pow((u0 - u), 2) + w1 * pow((u1 - u), 2);
if(deltatmp > deltamax)
} return threshold;
}
大津法 OTSU演算法
opencv的二值化操作中,有一種 大津閾值處理 的方法,使用函式cvthreshold image,image2,0,255,cv thresh otsu 實現,該函式就會使用大律法otsu得到的全域性自適應閾值來進行二值化,而引數中的threshold不再起作用。otsu演算法 otsu演算法也...
大津法 OTSU演算法
opencv的二值化操作中,有一種 大津閾值處理 的方法,使用函式cvthreshold image,image2,0,255,cv thresh otsu 實現,該函式就會使用大律法otsu得到的全域性自適應閾值來進行二值化,而引數中的threshold不再起作用。otsu演算法 otsu演算法也...
大津法 OTSU演算法
簡介 大津法 otsu 是一種確定影象二值化分割閾值的演算法,由日本學者大津於1979年提出。從大津法的原理上來講,該方法又稱作最大類間方差法,因為按照大津法求得的閾值進行影象二值化分割後,前景與背景影象的類間方差最大 何為類間方差?原理中有介紹 otsu演算法 otsu演算法也稱最大類間差法,有時...