簡體   English   中英

如何將圖像的鋸齒狀邊框平滑成直線?

[英]How to smoothen a jagged border of an image into a straight line?

我有這樣的圖像(閾值處理,噪聲消除等完成):

原始圖像

我的最終輸出應該是沒有任何鋸齒狀邊緣的圖像,並且小於給定圖像。 通過這個,我的意思是說,兩個圖像之間的唯一區別必須是在新圖像中,必須去除鋸齒狀邊緣,而不是填充鋸齒狀邊緣。 像這樣(最終圖像必須是紅色邊框內的區域,紅色邊框僅用於說明):

圖像顯示最終邊界應該如何

我正在考慮使用Hough變換,或者使用擴張然后使用糜爛的方法,但似乎沒有任何工作(可能是我的錯,因為我以前沒有對它們進行過多的細節處理)。

請注意,我想要的語言是MATLAB。

這有兩個主要目的:

  1. 為了獲得邊緣,使用Hough變換
  2. 因此,當使用regionprops時,'Extrema'屬性會返回所需的品脫,如下所示:

在此輸入圖像描述

問題,以更簡潔的形式:

  1. 我如何在MATLAB中提取這個T,這樣它就沒有粗糙的邊緣,但整體圖形並不比原來大,如上圖第二圖所示? 換句話說, 我將使用什么樣的變換(在MATLAB中)來平滑圖像的邊界, 盡可能少地丟失區域 (但沒有添加區域)使得粗糙度消失?
  2. 是否有更有效的方法來提取角點(極值)點,如上圖2所示,而無需通過步驟1?

編輯:一些示例圖像:

注意:所有考慮的圖像都將由大約彼此相差90度的矩形組成,而不是其他圖形。 因此,例如,對具有彎曲邊緣的圖像進行平滑處理將超出對該問題的答案的范圍(或者甚至,就此而言,梯形,盡管我認為平滑2個直邊應該是相同的,不管是否邊緣有另一個與之平行的邊緣)。

以下是一些圖片,供參考:

參考圖片2參考圖片3,證明了我不那么偉大的GIMP技能

我不確定我的答案是否符合您的要求。 我把它放在這里因為我覺得評論太久了。

  • 由於您希望最終輸出小於輸入圖像,因此會侵蝕輸入圖像。 您可以選擇適當的內核大小。
  • 在此侵蝕圖像上執行角點檢測。 這將為您提供所有強大的角落,但沒有任何訂單
  • 追蹤侵蝕圖像的邊界。 這應該給你一個有序的邊界像素列表
  • 現在,借助這些有序的邊界點,您可以訂購之前找到的角落
  • 過濾角點,形成大約90度的角度。 考慮到每個3個有序角點(兩個綠點和下圖中的紅點),你可以這樣做。這只是為了說明,而不是我計算的角點。在這個操作結束時,你有所有紅點除了其他黃色和綠色角點之外,下面的圖像位於強角處)
  • 現在你可以找到連接2個連續紅點的線的方程

要么

  • 將最小二乘線擬合到每兩個連續紅點之間的點(包括)

  • 因為你在一個基本上小於原始圖像的侵蝕圖像上進行了所有這些處理,所以你應該得到一個更小的形狀

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM