2012-07-03 171 views
0

我正在開發一個幫助用戶有效繪製的應用程序。我有一個C#代碼,它運行一個matlab腳本,並獲取參考圖像的邊緣檢測黑白圖像。現在,我開發了允許用戶在圖像上繪製的代碼。我的任務是引導用戶在這張圖片上繪畫。實質上,當用戶正在繪畫時,我的任務是看到在黑白邊緣檢測圖像上的繪畫不會穿過邊緣。我應該能夠檢測到當油漆行程越過邊緣時,應該在該邊緣處切斷。C#在邊緣內繪製圖像

我想找出如何存儲邊緣的信息,並檢查用戶是否擊中邊緣。如果有人可以提供一些相同的指導方針,這將是非常有幫助的。

由於

編輯:我已上載一個參考圖像和它的邊緣檢測的圖像。繪畫是在邊緣檢測圖像上完成的。

enter image description here

+0

很難確定你的邊緣是什麼意思。圖像中是否定義了邊緣「線條」,或者它們是圖像的邊緣(如圖像邊框)。此外,圖像可能會對您所接收的邊緣數據有所幫助。 – Trisped

+0

嗨,邊緣是圖像中定義的線條,就像由Sobel,Prewitt等操作員確定的邊緣一樣。我將更新問題並添加圖像 – Bharath

回答

3

看上去就像是不對您的邊緣檢測器,因爲它產生一對每個邊緣線。

你的目標check if the user has hit an edge意味着你需要一個絕對的決定 - EDGE或NO EDGE。但是像Sobel這樣的邊緣檢測算子會爲[0,255]範圍內的每個像素提供一個「邊緣」值。所以你需要更多的處理來做出這個絕對的決定。

簡單地對Sobel輸出進行閾值處理就容易產生噪音。例如,如果在尖銳的邊緣前面有一個小的失焦物體,那麼可能會使邊緣非常微弱。

調查Canny邊緣檢測器。其遲滯步驟有助於連接具有弱點的邊緣。輸出是二進制圖像 - 邊緣或無邊緣。

一旦你有一個邊緣圖像,你可以填充背景,將圖像分離成一組斷開的前景元素。然後使用Region labeling algorithm爲每個前景元素提供一個唯一的標籤。當用戶開始繪畫時,記錄它們在哪個區域內,然後限制繪畫到該區域。

該過程高度依賴於邊緣檢測圖像的質量。如果Canny探測器未能完全包圍具有邊緣的區域,則會失敗壯觀。

+0

感謝您的回覆。我試圖找到一種方法,可以將不連續的邊緣圖像轉換爲連續的圖像。如果您有任何教程或示例代碼,請告訴我。感謝名單 – Bharath