Ich habe SURF für Feature-Erkennung verwendet und dann habe ich RANSAC verwendet. Das genähte Bild, das ich habe, hat Nähte. Wie entferne ich diese?Image Stitching Methoden zum Entfernen von Nähten für genähte Bilder
Antwort
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:
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:
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.
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.
Dies ist keine Antwort. – Gerriet
Stiche? Sind sie gerade? eckig? variable Größe? zufällig? – gpasch
Sie sind tatsächlich an den Punkten, wo die zwei Bilder genäht werden, eckig. – user6053898
ok Bilder anzeigen – gpasch