我有是有效只是一個圖像的塊這是破碎成重疊部分夾在一堆圖像。我如何快速並以編程方式重新組合這些圖像以創建原始圖像?圖片包含有(像素到像素)精確匹配縫合在一起重疊
,我寧願使用Python或數學(或爲現有的應用程序)的解決方案,但我願意接受其他的想法(我相當精通Java的人)。
我有是有效只是一個圖像的塊這是破碎成重疊部分夾在一堆圖像。我如何快速並以編程方式重新組合這些圖像以創建原始圖像?圖片包含有(像素到像素)精確匹配縫合在一起重疊
,我寧願使用Python或數學(或爲現有的應用程序)的解決方案,但我願意接受其他的想法(我相當精通Java的人)。
嗯,我不再需要做這件事來做我想做的事情,但我會分享我如何將它寫入python(psuedocode和python的混合)。在這裏,我假設後續圖像的左上角始終是重疊點(這在我的情況中是這樣)。如果您想檢測任何角落的重疊,則需要檢測您所處的哪個「角落」情況(雙關語句:D)併爲每個情況添加處理。
images = list of images to be stitched, loaded from directory
stitched_image = images[0]
for (image in images):
if first image then skip it (continue)
else combine_images(stitched_image, image)
def combine_images (stitched_image, image_to_add):
top_left_corner = top left corner of image_to_add
// top_left_corner dimensions need to be big enough that you don't have a false positive,
// but not so big that the overlap doesn't exist
coordinates = find_coordinates(stitched_image,top_left_corner)
new_width = max(stitched_image.width,image_to_add.width + coordinates.x)
new_height = max(stitched_image.height,image_to_add.width + coordinates.y)
new_image = new Image(new_width,new_height) // See note 1
new_image.paste(stitched_image,(0,0))
new_image.paste(image_to_add,(coordinates.x,coordinates.y))
stitched_image = new_image
def find_coordinates (image,sub_image):
// See note 2 for how to implement
注:
創建圖像,並粘貼到它可以與PIL被全美基礎:http://29a.ch/2009/5/14/concatenating-images-using-python
請參閱如何找到圖像中的sub_image這個問題(可能需要將圖像轉換爲另一種表示):Finding a subimage inside a Numpy image。而且,對於任何熟練的程序員來說,手動檢查像素矩陣中的像素以找到重疊並不難。如果您只是首先在更可能出現的區域進行搜索,大致瞭解重疊可能發生的位置,則可以添加其他優化。
你可以使用Autopano或類似的東西;如果你想自己滾吧,你會發現SIFT有用http://www.janeriksolem.net/2009/02/sift-python-implementation.html?m=1
算法,你想要的是用於創建全景的工具。有各種各樣的工具出售來做到這一點與各種功能。事情要考慮是:圖像
雖然全景工具可以工作(有點),但大多數或全部都是混合,即不是我想要的。此外,它們並未針對我的使用情況進行優化,其中像素完全匹配兩個圖像的特定區域。 – Muhd
你的意圖上使用Java具體的解決方案?如果你打開別的東西,我做的一個項目類似的東西,並與爲Linux設置一個bash腳本走了過來。
要做到這一點,我用
pto_gen
不安裝HUGIN後存在,但被替換我在Panotools腳本match-n-shift
。如果您想按順序批量處理多個全景圖,您必須想出一種排序,執行和移動文件的方法。這是我的腳本編寫過程中有趣的部分。將圖片拼接在一起很容易,確保他們以後去正確的地方有點棘手。
現在,使用具有4 GB RAM 4核至強系統,拼接50圖像360度全景花費〜30-45分鐘。
比我需要的更復雜,更耗時。我需要一些能夠快速找到匹配的行或列的像素,並在該點上進行連續處理。 – Muhd
在數學,可以在重疊區域內使用ImageCorrespondingPoints,然後FindGeometricTransform計算的仿射變換,它有一個圖像到另一個。請注意,圖像和重疊區域的大小會影響轉換的準確性。如果你正在做一些複雜的事情(比如組合衛星圖像),你需要一個結果的整體幾何模型,然後將每個圖像映射到它。在這種情況下,仿射變換可能不夠。
另一個用例是使用滾動的2D遊戲截圖。我的問題基本上與[本文已結束的問題]中提出的問題相同(http://stackoverflow.com/questions/9104649/is-there-software-to-stitch-together-a-high-number-of-small -digital-images-witho) – Muhd
您可能會發現這個問題有用:http://mathematica.stackexchange.com/q/1911/121 –