2016-04-03 11 views

Antwort

2

Ich habe das Entfernen von Nähten zum Nähen von Bildern der Netzhaut des Auges implementiert. Unten sehen Sie die endgültige Wirkung finden:

enter image description here

Um dies zu tun, implementiert ich eine Technik, die auf Seite 138 von this Papier beschrieben. Im Folgenden finden Sie Pseudocode für diese Erklärung, vollständige Quelle finden Sie unter my repository.

Der Algorithmus basiert auf der Berechnung des endgültigen Pixelwerts, indem weighted average Pixelwerte von Bildern ausgeführt werden, die sich über diesem Pixel überlappen. Das Gewicht basiert auf der Entfernung vom Pixel zum Rand des Bildes. Wenn das Pixel näher an der Mitte des Bildes ist, zu dem es gehört, ist es wichtiger und das Gewicht ist größer. Die Entfernung des Pixels zum Rand des Bildes kann unter Verwendung der von OpenCV implementierten Funktion distanceTransform berechnet werden. Dies ist die Wirkung des Abstandes auf einem des am letzten Mosaik platziert Retina Bildes Auge verwandeln:

enter image description here

Im folgenden finden Sie Pseudo-Code finden:

// Images is an array of images that the program is stitching 

// For every image (after transform) on final plane calculate distance transform 
for (image in images) { 
    // Calculate distance transform 
    image.distanceTransform = distanceTransform(image) 
} 

// For every pixel in final mosaic, calulate its value by using weighted average 
for (row in rows) { 
    for (col in cols) { 
    currentPixel = FinalMosaic(col, row) 

    // Values for weighted average 
    numeratorSum = 0 
    denominatorSum = 0 

    // Go through all images that can overlap at this pixel 
    for (image in images) { 
     // If image is not overlapping over this pixel just skip 
     isOverlapping = image.isOverlapping(currentPixel) 
     if (isOverlapping) { 
     currentPixelWeight = image.distanceTransform.valueAt(currentPixel) 
     numeratorSum += currentPixelWeight * currentPixel.value 
     denominatorSum += currentPixelWeight 
     } 
    } 

    if (denominatorSum != 0) { 
     currentPixel.value = numeratorSum/denominatorSum 
    } 
    } 
} 

Wenn etwas unklar ist, schreiben Sie Fragen in die Kommentare und ich werde versuchen, die Antwort zu verbessern.

-2

Könnten Sie bitte sagen, was die Lösung war, die Sie schließlich bekommen, da ich nicht verstehen konnte, wie wir die Nahtlinie im Bild entfernen, wenn wir 2 Bilder verbinden und wir eine einzelne vertikale Nahtlinie zwischen zwei Bildern an der zeigen Sie, wo sie sich anschließen.

+0

Dies ist keine Antwort. – Gerriet