inpainting_ctinpainting_ctInpaintingCtInpaintingCt (Operator)

Name

inpainting_ctinpainting_ctInpaintingCtInpaintingCt — Inpainting eines Bildbereiches mittels Kohärenztransport.

Signatur

inpainting_ct(Image, Region : InpaintedImage : Epsilon, Kappa, Sigma, Rho, ChannelCoefficients : )

Herror inpainting_ct(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, double Epsilon, double Kappa, double Sigma, double Rho, double ChannelCoefficients)

Herror T_inpainting_ct(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, const Htuple Epsilon, const Htuple Kappa, const Htuple Sigma, const Htuple Rho, const Htuple ChannelCoefficients)

void InpaintingCt(const HObject& Image, const HObject& Region, HObject* InpaintedImage, const HTuple& Epsilon, const HTuple& Kappa, const HTuple& Sigma, const HTuple& Rho, const HTuple& ChannelCoefficients)

HImage HImage::InpaintingCt(const HRegion& Region, double Epsilon, double Kappa, double Sigma, double Rho, const HTuple& ChannelCoefficients) const

HImage HImage::InpaintingCt(const HRegion& Region, double Epsilon, double Kappa, double Sigma, double Rho, double ChannelCoefficients) const

static void HOperatorSet.InpaintingCt(HObject image, HObject region, out HObject inpaintedImage, HTuple epsilon, HTuple kappa, HTuple sigma, HTuple rho, HTuple channelCoefficients)

HImage HImage.InpaintingCt(HRegion region, double epsilon, double kappa, double sigma, double rho, HTuple channelCoefficients)

HImage HImage.InpaintingCt(HRegion region, double epsilon, double kappa, double sigma, double rho, double channelCoefficients)

Beschreibung

Der Operator inpainting_ctinpainting_ctInpaintingCtInpaintingCtInpaintingCt führt ein Inpainting auf der Region RegionRegionRegionRegionregion im Bild ImageImageImageImageimage durch, indem Bildinformation vom Rand dieser Region entlang der Kohärenzrichtung in das Innere transportiert wird.

Das grundlegende Konzept dieses Operators ist Inpainting durch Fortsetzten unterbrochener Höhenlinien. Somit müssen der Bildinhalt und die Inpaintingregion so beschaffen sein, dass diese Idee anwendbar ist. Das heißt, wenn eine Höhenlinie die Inpaintingregion beim Pixel p trifft, dann sollte es einen gegenüberliegenden Punkt q geben, an dem diese Höhenlinie weiterläuft so, dass die Fortsetzung Höhenlinie von zwei gegenüberliegenden Seiten funktioniert. In Fällen, in denen das Bild wenig Geometrie besitzt, kann ein diffusionsbasierter Inpainter, z.B., harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolation bessere Ergebnisse liefern. Alternativ kann KappaKappaKappaKappakappa auf 0 gesetzt werden. Ein Extremfall mit geringen globalen Geometrien sind reine Texturen. Dann wird die Idee hinter diesem Operator keine guten Ergenisse produzieren (man denke z.B. an ein Schachbrettmuster mit einer großen Inpaintingregion relativ zu den Schachfeldern). Für diesen Typ Bild ist ein texturbasiertes Inpaiting, wie z.B. inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureInpaintingTexture, zu empfehlen.

The Operator verwendet ein sogenanntes Upwind-Schema, um den fehlenden Pixeln Grauwerte zuzuweisen, d.h.,:

Die anfänglich verwendeten Bilddaten stammen aus einem Streifen der Dicke EpsilonEpsilonEpsilonEpsilonepsilon um die Inpaintingregion. Damit das Schema funktioniert, muss EpsilonEpsilonEpsilonEpsilonepsilon mindestens 1 sein, sollte aber größer gewählt werden. Der maximale Wert für EpsilonEpsilonEpsilonEpsilonepsilon hängt von den Grauwerten, die die in die Region transportiert werden sollen, ab. Eine Wahl von EpsilonEpsilonEpsilonEpsilonepsilon = 5 ist in vielen Fällen anwendbar.

Da das Ziel ist, unterbrochene Höhenlinien zu schließen, muss deren Richtung geschätzt und als Gewicht verwendet werden. Die geschätzte Richtung heißt Kohärenzrichtung, und wird mit Hilfe des Strukturtensors S berechnet. und wobei * die Faltung, u das Grauwertbild , D die Ableitung und G Gaußkerne mit Standardabweichungen bzw. bezeichnen. Diese Standardabweichungen werden in den Parametern SigmaSigmaSigmaSigmasigma und RhoRhoRhoRhorho des Operators übergeben. SigmaSigmaSigmaSigmasigma sollte von der Größenordung des Rauschens oder unwichtiger kleiner Objekte sein, welche dann durch durch das Vorglätten im Schätzschritt nicht mehr berücksichtigt werden. RhoRhoRhoRhorho legt die Größe des Fensters fest, welches um einen Pixel zur Richtungsschätzung gelegt wird. Die Kohärenzrichtung c ist die Eigenrichtung von S zum minimalen Eigenwert , d.h.

Zur Bearbeitung von Mehrkanal- oder Farbbildern wird das obige Schema auf jeden Kanal separat angewendet. Die Gewichte aber müssen für alle Kanäle gleich sein, um die Information in allen Kanälen in die gleiche Richtung zu propagieren. Wegen der Abhängigkeit der Gewichte von der Kohärenzrichtung wird hier die gemeinsame Richtung als Eigenrichtung eines zusammengesetzten Strukturtensors berechnet. Wenn nun die n Kanäle des Bildes bezeichnen, so werden die Kanalstrukturtensoren berechnet und wie folgt zum zusammengesetzten Strukturtensor S kombiniert. Die Koeffizienten werden im Parameter ChannelCoefficientsChannelCoefficientsChannelCoefficientsChannelCoefficientschannelCoefficients übergeben. ChannelCoefficientsChannelCoefficientsChannelCoefficientsChannelCoefficientschannelCoefficients ist dabei ein Tupel der Länge n oder der Länge 1. Falls die Tupellänge 1 ist, wird das arithmetische Mittel verwendet, d.h. . Ist die Tupellänge genau die Anzahl der Kanäle, so werden die Koeffizienten auf gestzt, um eine gültige Konvexkombination zu erhalten. Deswegen müssen die ChannelCoefficientsChannelCoefficientsChannelCoefficientsChannelCoefficientschannelCoefficients selbst größer gleich Null sein und deren Summe größer als Null. Sollte die Tupellänge weder 1 noch gleich der Anzahl der Kanäle sein, oder die Vorraussetzung an die Koeffizienten verletzt, so gibt der Operator eine Fehlermeldung aus.

Der Zweck, andere ChannelCoefficientsChannelCoefficientsChannelCoefficientsChannelCoefficientschannelCoefficients als das arithmetische Mittel zu benutzen, besteht darin, verschiedene Farbcodes zu adaptieren. Die Kohärenzrichtung ist eine geometrische Information des zusammengesetzten Bildes, welche durch starke Kontraste, wie z.B. Kanten, gegeben ist. Je kontrastreicher ein Kanal ist, desto mehr geometrische Information enthält er. Folglich sollte dessen Koeffizient, relativ zu den anderen, größer gewählt werden. Für RGB-Bilder ist [0.299, 0.587, 0.114] eine gute Wahl.

Das Gewicht in obigem Schema ist das Produkt einer Richtungskomponente und einer Distanzkomponente. Bezeichne p den 2D-Koordinatenvektor des aktuell zu beabeitenden Pixels und q den 2D-Koordinatenvektor eines Pixels in der Nachbarschaft (die Kreisscheibe beschränkt auf bereits bekannte Pixel). Dann misst die Richtungskomponente die Abweichung des Differenzvektors p-q von der Kohärenzrichtung. Falls die Abweichung, exponentiell skaliert mit , groß ist, wird eine kleine Richtungskomponente zugewiesen. Ansonsten wird eine große Richtungskomponente zugewiesen. wird gesteuert durch KappaKappaKappaKappakappa (in Prozent): KappaKappaKappaKappakappa definiert, wie wichtig es ist, Information entlang der Kohärenzrichtung zu propagieren, d.h. ein großer Wert für KappaKappaKappaKappakappa bewirkt scharfe Kanten, während ein kleines KappaKappaKappaKappakappa mehr Diffusion erlaubt.

Ein Sonderfall ist KappaKappaKappaKappakappa gleich Null: In dieser Situation ist die Richtungskomponente konstant (1). Die Richtungsschätzung wird dabei übersprugen, um Laufzeit zu sparen, und die Parameter SigmaSigmaSigmaSigmasigma, RhoRhoRhoRhorho, ChannelCoefficientsChannelCoefficientsChannelCoefficientsChannelCoefficientschannelCoefficients werden in diesem Fall bedeutungslos, d.h. die Propagation von Information basiert nicht mehr auf den im Bild sichtbaren Strukturen.

Die Distanzkomponente ist 1/|p-q|. Folglich wird, wenn q weit entfernt von p liegt, eine kleine Distanzkomponente zugewiesen, andernfalls, wenn q nahe bei p liegt, eine große Distanzkomponente.

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

ImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte / uint2 / real)

Eingabebild.

RegionRegionRegionRegionregion (input_object)  region objectHRegionHRegionHobject

Inpaintingregion.

InpaintedImageInpaintedImageInpaintedImageInpaintedImageinpaintedImage (output_object)  (multichannel-)image(-array) objectHImageHImageHobject * (byte / uint2 / real)

Ausgabebild.

EpsilonEpsilonEpsilonEpsilonepsilon (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Radius der Pixelnachbarschaft.

Defaultwert: 5.0

Typischer Wertebereich: 1.0 ≤ Epsilon Epsilon Epsilon Epsilon epsilon ≤ 20.0

Minimale Schrittweite: 1.0

Empfohlene Schrittweite: 1.0

KappaKappaKappaKappakappa (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Schärfeparameter in Prozent.

Defaultwert: 25.0

Typischer Wertebereich: 0.0 ≤ Kappa Kappa Kappa Kappa kappa ≤ 100.0

Minimale Schrittweite: 1.0

Empfohlene Schrittweite: 1.0

SigmaSigmaSigmaSigmasigma (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Vorglättungsparmeter.

Defaultwert: 1.41

Typischer Wertebereich: 0.0 ≤ Sigma Sigma Sigma Sigma sigma ≤ 20.0

Minimale Schrittweite: 0.001

Empfohlene Schrittweite: 0.01

RhoRhoRhoRhorho (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Glättungsparameter für die Richtungsschätzung.

Defaultwert: 4.0

Typischer Wertebereich: 0.001 ≤ Rho Rho Rho Rho rho ≤ 20.0

Minimale Schrittweite: 0.001

Empfohlene Schrittweite: 0.01

ChannelCoefficientsChannelCoefficientsChannelCoefficientsChannelCoefficientschannelCoefficients (input_control)  number(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Kanalgewichte.

Defaultwert: 1

Beispiel (HDevelop)

read_image (Image, 'claudia')
gen_circle (Circle, 333, 164, 35)
inpainting_ct (Image, Circle, InpaintedImage, 15, 25, 1.5, 3,1.0)

Alternativen

harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolation, inpainting_anisoinpainting_anisoInpaintingAnisoInpaintingAnisoInpaintingAniso, inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcf, inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCed, inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureInpaintingTexture

Literatur

Folkmar Bornemann, Tom März: „Fast Image Inpainting Based On Coherence Transport“; Journal of Mathematical Imaging and Vision; vol. 28, no. 3; pp. 259-278; 2007.

Modul

Foundation