99.97%時候的二值圖(為了視覺化,灰度值範圍設定為0-255)
90%的二值圖
核心演算法:
void edge_threshold(mat &src)
; uchar * d_data = dst.data;
for (int j = 0; j < dst.rows; j++)
}} long sum = 0, amount = 0;
double percent;
int t = 0;
for (int k = 0; k < 256; k++)
for (int i = 0; i < 256; i++) }
threshold(dst, thre, t, 1, thresh_binary);
mat src2;
src2 = thre.mul(src1);//取thre 中的畫素值為1的畫素點。
mat src3;
threshold(src1, src3, otsuthreshold(src2), 255, thresh_binary);
imshow("result", src3);
}
otsu演算法:
int otsuthreshold(mat src)
; uchar * s_data = src.data;
for (int i = 0; i < height; i++) }
int m = 0, n = 0; //m:第乙個有畫素的灰度值 n:最後乙個有畫素的灰度值
long sum_value = 0;//非零畫素個數
bool singel = true;
for (int i = 1; i < 256; i++)
if (histogram[i] != 0)
}for (int j = 255; j >= 0; j--) }
float sum0, sum1, cnt0, cnt1, w0, w1, u0, u1, u, variance;
float maxvariance = 0;
for (int i = m+1; i <= n; i++)
u0 = (double)sum0 / cnt0;
w0 = (double)cnt0 / sum_value;
for (int j = i; j <= n; j++)
u1 = (double)sum1 / cnt1;
w1 = (double)cnt1 / sum_value;
u = u0 * w0 + u1 * w1; //影象的平均灰度
variance = w0 * w1 * (u0 - u1) * (u0 - u1);
if (variance > maxvariance)
}} return threshold;
}
閾值的切割 基於opencv
一 基於固定閾值的分割 全域性 1 基本定義 固定閾值的分割是 最為簡單的一種影象分割方法,即選取乙個全域性閾值,然後就把整幅影象分成了非黑即白的二值影象。2 關鍵函式 ret,th cv2.threshold img,127,255,cv2.thresh binary ret return val...
基於法線的邊緣檢測
在邊緣高亮效果 中我提到過兩種方法,各有優缺點吧 影象空間域的邊緣檢測效果比較好,中間沒有多餘的線條.缺點是ps中計算比較慢 第二種把模型 放大 其實是變胖 的做法,可以在vs中完成,不需要額外的rendertarget,適合低端顯示卡使用,適應性好.不如果模型法線資訊不對的話,會造成畫面錯亂.實際...
基於Co training的改進演算法
co expectation maximizationalgorithm nigam 和ghani 2002 提出通過 隨機分割的特性,手動地對多個檢視進行聯合訓練,即使沒有自然的多個檢視,也可以提高效能。他們還提出了一 種co em 演算法,它擴充套件 了co training 演算法的原始引導方...