我想要找到兩個圖像之間的一個或幾個差異的輪廓。查找圖像之間的差異輪廓
假設你有兩個相同的圖像。然後在隨機位置添加一個不透明的正方形和三角形。形狀可能不重疊。
我想獲得這些形狀的最外像素的座標,這些座標必須是「分組」 - >我想獲得兩組座標,每組形狀爲一組。
我試着比較每個像素,並採取最小和最大x和y值,這給了我一個形狀的邊界框。這有兩個問題:它給我的邊界框,而不是形狀的輪廓。只有在圖像中沒有多於一個形狀的情況下才有效。
我不能爲我的生活想辦法完成這件事。
我非常依賴於php,但可以與gd或imagick一起使用。我對gd略有偏好,但imagick更快更強大,所以也沒關係。
加分:最終結果應該是一個簡單的(儘可能簡單)每個形狀的多邊形。精確度的一些損失是可以的,事實上是鼓勵的。多邊形的線條不必完全遵循輪廓線,允許有一些偏差而偏向於較少的點。
編輯:
我的意思「輪廓」是這樣的:假設我有一個形象與畫上有一個矩形。我想找到的輪廓是構成矩形的四個點。這個正方形畫的圖像可以是任何圖像。它可能是一個白色的畫布或風景或肖像,你的名字。
而我現在意識到的是,點的順序很重要。我必須能夠重新繪製廣場,而不是以沙漏形狀結束。
編輯2:
我更近一步使用imagick。
convert img/modified.png img/original.png -compose ChangeMask -composite out.png
此命令使用原件作爲修改版本的掩碼,並給我一個只有其形狀的圖像。也許有了這張圖片,我可以使用標準的邊緣檢測算法。
一個持續存在的問題:它只適用於圖像中只有一個形狀。但是,如果事實證明這是一個後果,那麼我猜這樣做會好的。
編輯3:
我現在能得到不太複雜形狀的輪廓。但是它會導致數百個點,這太多了。應該壓縮到大約20分。
的過程如下:
- 我使用上面的ImageMagick命令這使我的圖像只形狀,圖像的其餘部分是TRANSPARANT
- 在該圖像I從頂部開始(0,0)並向下看,找到一個不透明的像素。然後我看(1,0)等。當我到達結尾時,我開始在(寬度,0)並向左看非透明像素。通過這種方式,我可以遍歷圖像以「感受」輪廓。
爲什麼不嘗試標準輪廓算法之一?例如,canny,gradient,laplasian ... –
這些算法用於邊緣檢測,這不是我想要做的。您可以將其視爲查找兩幅圖像之間的差異。 –
然後說出「輪廓」是什麼意思?如果這是等值線,則可以使用步進平方算法。 –