hilditch細化 實現 python版本

2021-09-26 07:35:26 字數 3104 閱讀 3749

沒找到python實現,照著定義原理實現下了

def get_8count

(list_zhou9)

:"""

把通閾:param list_zhou9:

:return

:"""

list_zhou9 =[1

- one for one in list_zhou9]

count = list_zhou9[6]

- list_zhou9[6]

* list_zhou9[7]

* list_zhou9[0]

count += list_zhou9[0]

- list_zhou9[0]

* list_zhou9[1]

* list_zhou9[2]

count += list_zhou9[2]

- list_zhou9[2]

* list_zhou9[3]

* list_zhou9[4]

count += list_zhou9[4]

- list_zhou9[4]

* list_zhou9[5]

* list_zhou9[6]

return count

def sum_static

(b_list)

: sum_ =

0for i, one in

enumerate

(b_list)

:if one !=-1

: sum_ +=

1else

: copy = one

b_list[i]=0

ifget_8count

(b_list)==1

: sum_ +=

1 b_list[i]

= copy

return sum_

def neighbours

(h, w, image)

:"""

八通域的三種分類,目標,背景,選中(為了每輪計算)三種

:param h:

:param w:

:param image:

:return

:"""

h_1, w_1, h1, w1 = h -

1, w -

1, h +

1, w +

1 postiton_xy =

[[h, w1]

,[h_1, w1]

,[h_1, w]

,[h_1, w_1]

,[h, w_1]

,[h1, w_1]

,[h1, w]

,[h1, w1]

] b_list =[-

1if image[x, y]

==128

else

1if image[x, y]

==255

else

0for x, y in

postiton_xy]

return b_list

def hiliditch

(img_src)

:"""

hiliditch,細化方法

:param img_src: 輸入為操作的二值圖,0為背景,255為目標畫素

:return

: 硒化後的二至

"""rows, columns = img_src.shape[:2

] image_thinned = img_src.

copy()

is_continue = true

while is_continue:

is_continue = false

for h in

range(1

, rows -1)

:for w in

range(1

, columns -1)

:[x1, x2, x3, x4, x5, x6, x7, x8]

=neighbours

(h, w, image_thinned)

b_list =

[x1, x2, x3, x4, x5, x6, x7, x8]

func_1 = image_thinned[h, w]

==255 # 即當前畫素必須為前景點

func_2 =1-

abs(x1)+1

-abs

(x3)+1

-abs

(x5)+1

-abs

(x7)

>=

1 # 當前畫素為邊界點,即東西南北四個點至少有乙個b[i]=0

func_3 =

sum(

[abs

(one)

for one in b_list]

)>=

2 # 條件表示不能刪除端點

func_4 =

sum([1

if one ==

1else

0for one in b_list]

)>

1 # 條件表示不能刪除端點

func_5 =

get_8count

(b_list)

==1 # 連通性

func_6 =

sum_static

(b_list)

==8 #

if func_1 and func_2 and func_3 and func_4 and func_5 and func_6:

image_thinned[h, w]

=128

is_continue = true

for h in

range(1

, rows -1)

:for w in

range(1

, columns -1)

:if image_thinned[h, w]

==128

: image_thinned[h, w]=0

return image_thinned

q64 Hilditch細化演算法(C )

因為在opencv100wen後續沒有看到c 解答,這題按原本的思路自己寫了,但影象細化的有問題變得像梳子一樣,參考了一些發現判斷條件都有所區別。大致思路如下 分了3段 從左上角開始光柵掃瞄 如果 x,y 0不處理,為1,滿足下面五個條件時設 1 a.4 近鄰畫素的取值有乙個以上為0 b.8 連線數...

itemcf的hadoop實現優化 Python

原始資料如下 u1 a,d,b,c u2 a,a,c u3 b,d u4 a,d,c u5 a,b,c 計算公式使用 sim u i u j u i u j 其中 u i u j u i u j u i u j 原始的hadoop實現需要5輪mr,優化後只需要兩輪就可以完成。之前的輪數過多,主要在於...

機器學習PAI實現精細化營銷

阿里雲大學課程 機器學習pai實現精細化營銷 課程介紹 精細化營銷是企業常用的的一類資料服務,本課程幫助學員了解企業進行精細化營銷過程中的資料處理,掌握客戶分群的基本應用方法,教會學員如何進行資料整體分析 模型構建以及後期的模型評估和生成評估報告,清楚大資料在企業營銷中的作用。本課程通過乙個簡單案例...