2012-02-25 61 views
2

我正在做一些研究,看看是否可以編寫能夠通過標識特定圖案/對象的位置來處理圖像,然後輸出xy對象的像素位置。php - 在圖形中標識圖案的位置

該項目將用於處理a地圖,其中所有地圖都是使用相同的過程生成的,並且座椅的圖標在每種情況下都保持不變(包括相同的尺寸 - 16x17像素)。

一個典型的地圖看起來像http://s140173.gridserver.com/so/map.gif

...等等顯然,單獨圖標看起來像http://s140173.gridserver.com/so/icon.gif

我正打算環路某種形式的「搜索」腳本查找第一個「圖標「,將圖標的xy位置添加到數組中,然後使圖像變暗(使用圖像功能在內存中)並重復搜索以再次找到」第一個圖標「(因爲原始圖像不再與它被扭曲了) - 但我不確定任何能夠以這種方式匹配圖形的類/函數/擴展。

有關如何完成此模式匹配的任何想法?有沒有能夠做到這一點的圖書館或擴展?如果沒有,任何人都可以提出另一個適合的平臺嗎?

乾杯。

+0

我沒有讀完整件事,但是這個頁面或其他喜歡它的頁面可能會有幫助:http://www.searchlores.org/finn_cbir_2.htm – TecBrat 2012-02-25 04:21:32

+2

php確實有一些功能可以使用,比如[imagecolorclosest](http://nl3.php.net/manual/en/function.imagecolorclosest.php),[imagecolorat](http://nl3.php.net/manual/en/function.imagecolorat.php)和很多其他人。我不認爲你想要的是不可能的! – giorgio 2012-02-25 04:22:34

+0

XOR'ing可能會有所幫助,imagick可以做到這一點:http://www.php.net/manual/en/imagickdraw.composite.php - 但PHP不會是處理所有可能組合的最快語言。 – hakre 2012-02-25 04:27:21

回答

1

使用GD將會非常慢並且效率低下,但是假設圖標尺寸相同,您可以輕鬆地遍歷圖像並持續比較每個可能的尺寸矩形,直到找到匹配。這將只是兩個for循環,獲取顏色與imagecolorat,並將這些矩形與您的目標進行比較,爲此有許多簡單的方法來實現。但我不建議這樣做,因爲找到每個小目標需要幾秒鐘的時間。

您可能想看看OpenCV哪些可以對圖像進行這種類型的智能分析,但使用起來相當複雜。這將是更好的方式,但它不是PHP,可能會爲你的目的矯枉過正。

+0

謝謝,阿拉斯代爾。 OpenCV對我們所需要的東西看起來有點過頭,但絕對是一個有趣的工具。我想出了一個基於使用imagecolorat的解決方案,並且只需在0,0位置用一個灰白色的1x1像素標記每個圖標即可。腳本循環遍歷map,檢查每個像素,如果它匹配正確的顏色索引,它將x,y值添加到數組中。試圖識別圖像要容易得多。謝謝你的幫助! – 2012-02-25 06:08:06

+0

聽起來像一個很好的解決方案,但如果你在控制生成的圖像......爲什麼不把座標記錄在第一位呢? – Alasdair 2012-02-25 07:23:37

+0

地圖由我們的營銷團隊生成 - 通常使用Photoshop和類似的東西。所以我們對這一代沒有控制權 - 但他們以前使用過模板圖標,所以我剛更新了他們用來包含這個1x1標記像素的模板圖標。 – 2012-02-27 11:01:10