inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureinpainting_texture (Operator)

Name

inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureinpainting_texture — Inpainting eines Bildbereiches durch Texturfortsetzung.

Signatur

inpainting_texture(Image, Region : InpaintedImage : MaskSize, SearchSize, Anisotropy, PostIteration, Smoothness : )

Herror inpainting_texture(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, const Hlong MaskSize, const Hlong SearchSize, double Anisotropy, const char* PostIteration, double Smoothness)

Herror T_inpainting_texture(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, const Htuple MaskSize, const Htuple SearchSize, const Htuple Anisotropy, const Htuple PostIteration, const Htuple Smoothness)

void InpaintingTexture(const HObject& Image, const HObject& Region, HObject* InpaintedImage, const HTuple& MaskSize, const HTuple& SearchSize, const HTuple& Anisotropy, const HTuple& PostIteration, const HTuple& Smoothness)

HImage HImage::InpaintingTexture(const HRegion& Region, Hlong MaskSize, Hlong SearchSize, double Anisotropy, const HString& PostIteration, double Smoothness) const

HImage HImage::InpaintingTexture(const HRegion& Region, Hlong MaskSize, Hlong SearchSize, double Anisotropy, const char* PostIteration, double Smoothness) const

HImage HImage::InpaintingTexture(const HRegion& Region, Hlong MaskSize, Hlong SearchSize, double Anisotropy, const wchar_t* PostIteration, double Smoothness) const   (Nur Windows)

static void HOperatorSet.InpaintingTexture(HObject image, HObject region, out HObject inpaintedImage, HTuple maskSize, HTuple searchSize, HTuple anisotropy, HTuple postIteration, HTuple smoothness)

HImage HImage.InpaintingTexture(HRegion region, int maskSize, int searchSize, double anisotropy, string postIteration, double smoothness)

def inpainting_texture(image: HObject, region: HObject, mask_size: int, search_size: int, anisotropy: float, post_iteration: str, smoothness: float) -> HObject

Beschreibung

Der Operator inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureInpaintingTextureinpainting_texture dient zur Entfernung größerer Objekte oder Bildstörungen aus der Region RegionRegionRegionRegionregionregion des Eingabebildes ImageImageImageImageimageimage. Dazu werden Bildblöcke der Kantenlänge MaskSizeMaskSizeMaskSizeMaskSizemaskSizemask_size aus dem intakten Teil des Bildes an den Rand des Rechengebietes angefügt, bis dieses vollständig mit neuen Grauwerten gefüllt ist. Dieser Vorgang wird als Image Inpainting bezeichnet. Das Rechengebiet heißt daher auch Inpaintinggebiet, und wird ausgehend von RegionRegionRegionRegionregionregion mit jedem eingefügten Rechteck verkleinert. Der Mittelpunkt des aktuell zu bearbeitenden Blockes befinde sich an einer Stelle x. Da x immer auf dem Rand des Inpaintinggebietes gewählt wird, überlappt dieser aktuelle Block mit den bekannten oder bereits eingefügten Grauwerten. Welcher andere Bildblock an die Stelle x passt, wird über seine Grauwertkorrelation mit den Grauwerten im Überlappungsbereich des aktuellen Blocks bestimmt. Als Korrelation wird die Summe der Quadrate der Grauwertdifferenzen verwendet. Die Bildblöcke, die für die Korrelation herangezogen werden und als Kandidaten für die Datenquelle des nächsten Inpaintingschrittes dienen, bezeichnen wir als Vergleichsblöcke. Der Suchbereich für geeignete Grauwertmuster ist auf ein Quadrat der Kantenlänge 2* SearchSizeSearchSizeSearchSizeSearchSizesearchSizesearch_size um den Punkt x beschränkt, in dem sich die Mittelpunkte der Vergleichsblöcke befinden müssen.

Die Reihenfolge, in der die Pixel von RegionRegionRegionRegionregionregion aufgefüllt werden, hängt zum einen von der Größe des Überlappungsbereiches und damit von der Anzahl der für die Grauwertkorrelation zur Verfügung stehenden Pixel und zum anderen vom Betrag der Ableitung der Grauwertfunktion tangential zum Rand des Rechengebietes ab. Je größer der Wert des Parameters AnisotropyAnisotropyAnisotropyAnisotropyanisotropyanisotropy ist, desto stärker werden Punkte, an denen die Ableitung groß ist, bevorzugt. Dadurch wird z.B. erreicht, dass gerade Kanten, die durch den hohen Gradienten repräsentiert werden, durch das gesamte Rechengebiet hindurch fortgesetzt werden können, ohne bei kleiner werdendem Inpaintinggebiet durch das Inpainting von Bildstrukturen von anderen Teilen des Randes unterbrochen zu werden. Auf der anderen Seite führt ein größer Wert von AnisotropyAnisotropyAnisotropyAnisotropyanisotropyanisotropy aber auch dazu, dass eventuelle Scheinkanten, also während des Inpaintings zufällig entstandene unerwünschte Strukturen, ebenfalls propagiert und Störungen so vergrößert werden können.

Um die Bildung solcher Artefakte einzudämmen, kann der ursprüngliche Algorithmus um eine Nachiteration erweitert werden, bei der glatte oder unscheinbare Bildbereiche als Datenquellen für das Inpainting bevorzugt werden. Setzt man den Parameter PostIterationPostIterationPostIterationPostIterationpostIterationpost_iteration auf den Wert 'min_grad'"min_grad""min_grad""min_grad""min_grad""min_grad", so wird die Summe der Quadrate der Grauwertgradienten über die Vergleichsblöcke minimiert, setzt man ihn auf 'min_range_extension'"min_range_extension""min_range_extension""min_range_extension""min_range_extension""min_range_extension", so minimiert man das Anwachsen des Grauwertintervalls der Vergleichsblöcke gegenüber dem Referenzrechteck um den Punkt x. Hat PostIterationPostIterationPostIterationPostIterationpostIterationpost_iteration den Wert 'none'"none""none""none""none""none", wird keine Nachiteration durchgeführt. Welche Blöcke für die nachträgliche Minimierung zulässig sind, wird durch den Parameter SmoothnessSmoothnessSmoothnessSmoothnesssmoothnesssmoothness festgelegt. Dieser bestimmt, wie viel größer die mittlere absolute Abweichung der Grauwerte in den zulässigen Vergleichsblöcken gegenüber der vom Ursprungsalgorithmus bestimmten minimalen Abweichung ausfallen darf. Mit zunehmendem Wert von SmoothnessSmoothnessSmoothnessSmoothnesssmoothnesssmoothness wird das Inpaintingergebnis daher glatter und Strukturen verschwinden. Die Passgenauigkeit der gewählten Vergleichsblöcke nimmt dabei ab. Wird SmoothnessSmoothnessSmoothnessSmoothnesssmoothnesssmoothness auf 0 gesetzt, so berücksichtigt die Nachiteration nur Vergleichsblöcke mit gleich starker Korrelation zum Referenzblock.

Kann das Inpainting nicht vollständig durchgeführt werden, weil Punkte x existieren, für die kein vollständiger Block mit intakten Grauwertinformationen im Suchbereich der Größe SearchSizeSearchSizeSearchSizeSearchSizesearchSizesearch_size vorhanden ist, so behalten die verbleibenden Pixel ihren ursprünglichen Grauwert und die ROI des Ausgabebildes InpaintedImageInpaintedImageInpaintedImageInpaintedImageinpaintedImageinpainted_image wird um den unbearbeiteten Bereich reduziert. Ist die Strukturgröße der ROI von ImageImageImageImageimageimage oder des Rechengebietes RegionRegionRegionRegionregionregion kleiner als MaskSizeMaskSizeMaskSizeMaskSizemaskSizemask_size, so kann die Laufzeit des Algorithmus extrem anwachsen. Es sollten daher nur klar strukturierte Eingaberegionen verwendet werden.

Achtung

Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.

Ausführungsinformationen

Parameter

ImageImageImageImageimageimage (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte / uint2 / real)

Eingabebild.

RegionRegionRegionRegionregionregion (input_object)  region objectHRegionHObjectHRegionHobject

Inpaintingregion.

InpaintedImageInpaintedImageInpaintedImageInpaintedImageinpaintedImageinpainted_image (output_object)  image(-array) objectHImageHObjectHImageHobject * (byte / uint2 / real)

Ausgabebild.

MaskSizeMaskSizeMaskSizeMaskSizemaskSizemask_size (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Größe der Inpaintingblöcke.

Defaultwert: 9

Wertevorschläge: 7, 9, 11, 15, 21

Restriktion: MaskSize >= 3 && odd(MaskSize)

SearchSizeSearchSizeSearchSizeSearchSizesearchSizesearch_size (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Größe des Suchfensters.

Defaultwert: 30

Wertevorschläge: 15, 30, 50, 100, 1000

Restriktion: 2 * SearchSize > MaskSize

AnisotropyAnisotropyAnisotropyAnisotropyanisotropyanisotropy (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Einfluss der Kantenstärke auf die Inpaintingreihenfolge.

Defaultwert: 1.0

Wertevorschläge: 0.0, 0.01, 0.1, 0.5, 1.0, 10.0

Restriktion: Anisotropy >= 0

PostIterationPostIterationPostIterationPostIterationpostIterationpost_iteration (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Nachiteration zur Artefaktreduzierung.

Defaultwert: 'none' "none" "none" "none" "none" "none"

Werteliste: 'min_grad'"min_grad""min_grad""min_grad""min_grad""min_grad", 'min_range_extension'"min_range_extension""min_range_extension""min_range_extension""min_range_extension""min_range_extension", 'none'"none""none""none""none""none"

SmoothnessSmoothnessSmoothnessSmoothnesssmoothnesssmoothness (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Grauwerttoleranz für Nachiteration.

Defaultwert: 1.0

Wertevorschläge: 0.0, 0.1, 0.2, 0.5, 1.0

Restriktion: Smoothness >= 0

Modul

Foundation