4

我有是有效只是一個圖像的塊這是破碎成重疊部分夾在一堆圖像。我如何快速並以編程方式重新組合這些圖像以創建原始圖像?圖片包含有(像素到像素)精確匹配縫合在一起重疊

,我寧願使用Python或數學(或爲現有的應用程序)的解決方案,但我願意接受其他的想法(我相當精通Java的人)。

+0

另一個用例是使用滾動的2D遊戲截圖。我的問題基本上與[本文已結束的問題]中提出的問題相同(http://stackoverflow.com/questions/9104649/is-there-software-to-stitch-together-a-high-number-of-small -digital-images-witho) – Muhd

+0

您可能會發現這個問題有用:http://mathematica.stackexchange.com/q/1911/121 –

回答

0

嗯,我不再需要做這件事來做我想做的事情,但我會分享我如何將它寫入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 

注:

  1. 創建圖像,並粘貼到它可以與PIL被全美基礎:http://29a.ch/2009/5/14/concatenating-images-using-python

  2. 請參閱如何找到圖像中的sub_image這個問題(可能需要將圖像轉換爲另一種表示):Finding a subimage inside a Numpy image。而且,對於任何熟練的程序員來說,手動檢查像素矩陣中的像素以找到重疊並不難。如果您只是首先在更可能出現的區域進行搜索,大致瞭解重疊可能發生的位置,則可以添加其他優化。

0

算法,你想要的是用於創建全景的工具。有各種各樣的工具出售來做到這一點與各種功能。事情要考慮是:圖像

  • 校正攝像機旋轉和角度之間

    1. 匹配位置垂直和水平
    2. 不同亮度
  • +0

    雖然全景工具可以工作(有點),但大多數或全部都是混合,即不是我想要的。此外,它們並未針對我的使用情況進行優化,其中像素完全匹配兩個圖像的特定區域。 – Muhd

    0

    你的意圖上使用Java具體的解決方案?如果你打開別的東西,我做的一個項目類似的東西,並與爲Linux設置一個bash腳本走了過來。

    要做到這一點,我用

    1. Hugin和HUGIN工具從Ubuntu軟件庫
    2. Panotools perl的包裝腳本
    3. This guide得到生成功能通過命令行工作。在這個例子中,pto_gen不安裝HUGIN後存在,但被替換我在Panotools腳本match-n-shift

    如果您想按順序批量處理多個全景圖,您必須想出一種排序,執行和移動文件的方法。這是我的腳本編寫過程中有趣的部分。將圖片拼接在一起很容易,確保他們以後去正確的地方有點棘手。

    現在,使用具有4 GB RAM 4核至強系統,拼接50圖像360度全景花費〜30-45分鐘。

    +0

    比我需要的更復雜,更耗時。我需要一些能夠快速找到匹配的行或列的像素,並在該點上進行連續處理。 – Muhd

    0

    在數學,可以在重疊區域內使用ImageCorrespondingPoints,然後FindGeometricTransform計算的仿射變換,它有一個圖像到另一個。請注意,圖像和重疊區域的大小會影響轉換的準確性。如果你正在做一些複雜的事情(比如組合衛星圖像),你需要一個結果的整體幾何模型,然後將每個圖像映射到它。在這種情況下,仿射變換可能不夠。