最近研究閾值化演算法,otus算是目前應用比較廣泛的,自己想實現otus看和opencv對比,哪個用時短
最後經numba加速後還是失敗,opencv的otus演算法速度是自己手寫的轉換速度的5~10倍。果然現成的輪子是比較好用的
otus法又稱最大類間方差法或者大津法,基本思想就是計算前景類與背景類之間的類間方差,當某個灰度級對應得到的類間方差最大時,即認為此時的閾值為最佳閾值。相關原理可以參考:
def
otus_threshold
(image)
:""" image should be in gray"""
n, m = image.shape
total_pixel = n * m
hist = cal_hist(image)
# 自己寫的灰度直方計算函式 可用下面的代替
# opencv 中的灰度直方計算函式
# hist = cv.calchist([gray], [0], none, [256], [0, 256])
# 總平均灰度
u =0.0for i in
range
(len
(hist)):
u = u + i * hist[i]
u = u / total_pixel
# 背景灰度級平均灰度
u_0 =
u_0_mid =
0.0 w_0 =
for j in
range
(len
(hist)):
back_pixel = np.
sum(hist[
:j+1])
u_0_mid = u_0_mid + j * hist[j]
if back_pixel ==0:
0.0)
else
:# print(u_0)
# 類間方差
g =a =
0.0for k in
range
(len
(hist)):
if w_0[k]==1
:else
: u_1 =
(u - u_0[k]
* w_0[k])/
(1- w_0[k]
) g_mid = w_0[k]*(
1.0- w_0[k])*
(u_0[k]
- u_1)
*(u_0[k]
- u_1)
# print(len(g), g)
g_index = g.index(
max(g)
)return g_index
函式的輸入必須為灰度影象,返回值為最佳閾值,函式未將影象轉化為二值圖,可自己寫可歷遍對比轉化一下
otus, src_threshold = cv.threshold(image_gray,0,
255, cv.thresh_binary + cv.thresh_otsu)
返回值為最佳閾值 與轉換後的二值化影象 造輪子 Shell實現守護程序
雖然在程式猿的世界裡流行乙個諺語 不要重複造輪子 但是如果你開的就是一輛16寸輪轂的a級車,給你一副21寸的賓利輪轂你也是裝不上的。就算是運氣好找到了一副18寸的奧迪輪轂,可以正常的安裝並行駛,但是大輪轂所帶來的車速表不准,舒適度下降的問題又是不可避免的。所以適當的造造輪子也不失是一種節約後期維護成...
造輪子 補碼實現與若干分析
這周計算機原理課收到樓sir的乙個作業 要自己實現一套整數編碼的數碼轉換與若干運算,並分析。我拿到的是補碼,其他的隊友分別要實現一套原碼 移碼或者自行設計一套 帥碼 666 程式語言 c 聽說規定要用c語言造這個輪子,真是遺憾,要是c 還可以各種運算子過載可以很優雅。那好吧,在編碼之前,先做個約束。...
造輪子 toast元件的實現 下
1.解決 toast 中傳入 html 的問題,通過假的 slot 來實現 plugins.js toast.slots.default message toast.vue 使用 created 2.在 toast 中加 html 是比較危險的乙個動作,所以要加乙個選項預設不開啟。toast.vue...