q64 Hilditch細化演算法(C )

2021-10-07 22:45:43 字數 3013 閱讀 5778

因為在opencv100wen後續沒有看到c++解答,這題按原本的思路自己寫了,但影象細化的有問題變得像梳子一樣,參考了一些發現判斷條件都有所區別。

大致思路如下:(分了3段)

從左上角開始光柵掃瞄

如果(x,y)=0不處理,為1,滿足下面五個條件時設-1

a.4-近鄰畫素的取值有乙個以上為0

b.8-連線數為1,即端點

c.8-近鄰的絕對值之和大於2

d.8-近鄰中有1個以上取值為1 (這個條件在函式中去掉了)

e. 對所有8個近鄰點xn滿足任意乙個(xn值不為-1 || 當xn值為0時(x,y)的8-連線數為1)

將每個畫素的-1更改為0

重複光柵掃瞄,直到步驟3中畫素值改變次數為0

mat hilditch

(mat otsu)

}int count =1;

while

(count >0)

} mat _tmp8 = tmp8.

clone()

;for

(int y =

0; y < height;

++y)

}if (judge == 4)

break;

}*/if(judge <3)

//條件不滿足可以直接下乙個點

continue

;//condition 5: 對所有8個近鄰點xn滿足任意乙個

// xn值不為 - 1 || 當xn值為0時,x連線數為1(但沒有判斷值為0,判斷了有問題)

//重新計算8-連線數

for(

int dy =-1

; dy <2;

++dy)

} s =0;

s += _tmp8.at

(y,min

(x +

1, width -1)

)- _tmp8.at

(y,min

(x +

1, width -1)

)*_tmp8.at

(max

(y -1,

0),min

(x +

1, width -1)

)*_tmp8.at

(max

(y -1,

0), x)

; s +

= _tmp8.at

(max

(y -1,

0), x)

- _tmp8.at

(max

(y -1,

0), x)

*_tmp8.at

(max

(y -1,

0),max

(x -1,

0))*_tmp8.at

(y,max

(x -1,

0));

s += _tmp8.at

(y,max

(x -1,

0))- _tmp8.at

(y,max

(x -1,

0))*_tmp8.at

(min

(y +

1, height -1)

,max

(x -1,

0))*_tmp8.at

(min

(y +

1, height -1)

, x)

; s +

= _tmp8.at

(min

(y +

1, height -1)

, x)

- _tmp8.at

(min

(y +

1, height -1)

, x)

*_tmp8.at

(min

(y +

1, height -1)

,min

(x +

1, width -1)

)*_tmp8.at

(y,min

(x +

1, width -1)

);//leftup

if(s ==

1|| tmp.at

(max

(y -1,

0),max

(x -1,

0))!= out.at

(max

(y -1,

0),max

(x -1,

0)))

++judge;

//up

if(s ==

1|| tmp.at

(max

(y -1,

0), x)

!= out.at

(max

(y -1,

0), x)

)++judge;

//rightup

if(s ==

1|| tmp.at

(max

(y -1,

0),min

(x +

1, width -1)

)!= out.at

(max

(y -1,

0),min

(x +

1, width -1)

))++judge;

//left

if(s ==

1|| tmp.at

(y,max

(x -1,

0))!= out.at

(y,max

(x -1,

0)))

++judge;

if(judge ==7)

}}}for

(int y =

0; y < height;

++y)

}return out;

}

效果圖:(交接處問題比較大)

STM32 外部FLASH(W25Q64)模擬U盤

1 硬體 stm32f103vet6微控制器 hal庫 2 編譯環境 atollic truestudio for stm32 9.3.0 3 輔助工具 stm32cubemx 1 開啟除錯介面 2 選擇時鐘源 3 開啟usb功能 4 選擇usb中介軟體,配置usb為大容量儲存型別,資料報的大小為4...

華邦記憶體編碼含義w25q64d

winbond 華邦 含義說明 a欄位由w組成,代表華邦 winbond 記憶體晶元的字首。b欄位表示產品型別。98代表sdram記憶體94代表ddr sdram記憶體。c欄位表示記憶體晶元的容量。16代表16mbit 2mb 32代表32mbit 4mb 64代表64mbit 8mb 12代表12...