inpainting_cedinpainting_cedInpaintingCedInpaintingCed (Operator)

Name

inpainting_cedinpainting_cedInpaintingCedInpaintingCed — Inpainting eines Bildbereiches durch kohärenzverstärkende Diffusion.

Signatur

inpainting_ced(Image, Region : InpaintedImage : Sigma, Rho, Theta, Iterations : )

Herror inpainting_ced(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, double Sigma, double Rho, double Theta, const Hlong Iterations)

Herror T_inpainting_ced(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, const Htuple Sigma, const Htuple Rho, const Htuple Theta, const Htuple Iterations)

void InpaintingCed(const HObject& Image, const HObject& Region, HObject* InpaintedImage, const HTuple& Sigma, const HTuple& Rho, const HTuple& Theta, const HTuple& Iterations)

HImage HImage::InpaintingCed(const HRegion& Region, double Sigma, double Rho, double Theta, Hlong Iterations) const

static void HOperatorSet.InpaintingCed(HObject image, HObject region, out HObject inpaintedImage, HTuple sigma, HTuple rho, HTuple theta, HTuple iterations)

HImage HImage.InpaintingCed(HRegion region, double sigma, double rho, double theta, int iterations)

Beschreibung

Der Operator inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCed führt einen anisotropen Diffusionsvorgang in der Region RegionRegionRegionRegionregion des Eingabebildes ImageImageImageImageimage durch mit dem Ziel, durch Verstärkung der Kohärenz der in ImageImageImageImageimage enthaltenen Bildstrukturen unterbroche Bildkanten diffusiv miteinander zu verbinden ohne sie dabei senkrecht zur Kantenrichtung zu verschmieren. Dieser Mechanismus entspricht dem des Operators coherence_enhancing_diffcoherence_enhancing_diffCoherenceEnhancingDiffCoherenceEnhancingDiffCoherenceEnhancingDiff, der auf einer Diskretisierung der anisotropen Diffusionsgleichung nach Weickert beruht. Diese Gleichung, mit einer von den Grauwerten in ImageImageImageImageimage abhängigen 2x2 Koeffizientenmatrix G, ist eine Verallgemeinerung der Krümmungsfluss- oder intrinsischen Wärmeleitungsgleichung mit der durch das Eingabebild ImageImageImageImageimage zu einem Zeitpunkt definierten Grauwertfunktion u. Der Operator mean_curvature_flowmean_curvature_flowMeanCurvatureFlowMeanCurvatureFlowMeanCurvatureFlow ist eine direkte Anwendung der Krümmungsflussgleichung, mit Hilfe des Operators inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcf, kann sie auch für das Image Inpainting genutzt werden. Die diskrete Gleichung wird in IterationsIterationsIterationsIterationsiterations Zeitschritten der Länge ThetaThetaThetaThetatheta gelöst, so dass das Ausgabebild InpaintedImageInpaintedImageInpaintedImageInpaintedImageinpaintedImage die Grauwertfunktion zur Zeit enthält.

Um die Kantenrichtungen insbesondere bei verrauschten Eingabedaten stabiler zu bestimmen, kann der Berechnung der Grauwertgradienten ein zusätzlicher isotroper Glättungsschritt vorgeschaltet werden. Der Parameter SigmaSigmaSigmaSigmasigma bestimmt die Stärke dieser Glättung als Standardabweichung des zugehörigen Gauß-Faltungskernes, wie er auch im Operator isotropic_diffusionisotropic_diffusionIsotropicDiffusionIsotropicDiffusionIsotropicDiffusion zur isotropen Glättung eines Bildes verwendet wird.

Ebenso wie im Operator inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcf wird hier die Struktur der Bilddaten in RegionRegionRegionRegionregion durch Glättung der Niveaulinien vereinfacht. So lassen sich störende Objekte aus dem Bild entfernen, wobei die Kanten der Umgebung stetig fortgesetzt werden. Diesen Vorgang bezeichnet man als Image Inpainting. Ziel ist es, dass keine auffälligen Artefakte oder Schmiereffekte zurückbleiben, damit die Bildmanipulation für einen menschlichen Beobachter möglichst schwach sichtbar wird.

Während die Matrix G im Fall des Krümmungsflusses inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcf gegeben wird durch wobei I die Einheitsmatrix bezeichnet, wird diese Matrix in inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCed komponentenweise in Ortsrichtung durch einen Gaußfilter mit Standardabweichung RhoRhoRhoRhorho geglättet und anschließend aus den Eigenwerten und Eigenvektoren der so entstandenen Matrix die endgültige Koeffizientenmatrix konstruiert, wobei die Funktionen empirisch bestimmt und aus der Veröffentlichung von Weickert entnommen sind.

Die Diffusionsrichtung wird bei inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcf also alleine durch die lokale Richtung des Grauwertgradienten bestimmt, wohingegen die makroskopische Struktur der Bildobjekte auf der Skala RhoRhoRhoRhorho wiedergibt und die Stärke der Diffusion in inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCed davon abhängt, wie gut diese Struktur definiert ist.

Um bestmögliche Übereinstimmung der erzeugten Kanten mit den Bilddaten der Umgebung zu erreichen, werden nicht wie bei Filtern üblich die Grauwerte am Rand des Rechengebietes RegionRegionRegionRegionregion gespiegelt, um die Glättung mit der Filtermaske zum Wert RhoRhoRhoRhorho auf den randnahen Pixeln durchzuführen. Stattdessen wird die Existenz von Grauwerten auf einem ceil(3.1*Rho)+2 Pixel breiten Streifen um RegionRegionRegionRegionregion vorausgesetzt und diese Werte bei der Anwendung der Faltungsmaske mitverwendet. Das bedeutet, RegionRegionRegionRegionregion muss mindestens diesen Abstand zum Rand der Bildmatrix ImageImageImageImageimage einhalten. Durch die Einbeziehung der Grauwerte und Richtungsinformationen in diesem erweiterten Gebiet wird erreicht, dass die Fortsetzung der Kanten nicht nur stetig, sondern auch glatt, das heißt ohne Knicke, erfolgt. Es ist zu beachten, dass der Inpaintingvorgang sich auf diejenigen Pixel beschränkt, die innerhalb der ROI des Eingabebildes ImageImageImageImageimage liegen. Umfasst diese nicht die gesamte Region RegionRegionRegionRegionregion, so wird ein Streifen um die Schnittmenge aus RegionRegionRegionRegionregion und der ROI verwendet, um die Randwerte zu definieren.

Um die Anzahl der notwendigen Iterationen bis zum Erreichen eines zufriedenstellenden Zustandes zu reduzieren, kann es sinnvoll sein, die Grauwertmatrix in RegionRegionRegionRegionregion vor Aufruf von inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCed durch den Operator harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolation mit der harmonischen Interpolante, einer stetigen Funktion mit minimaler Krümmung, vorzuinitialisieren.

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)  image(-array) objectHImageHImageHobject * (byte / uint2 / real)

Ausgabebild.

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

Glättungsparameter für Ableitungsoperator.

Defaultwert: 0.5

Wertevorschläge: 0.0, 0.1, 0.5, 1.0

Restriktion: Sigma >= 0

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

Glättungsparameter für Diffusionskoeffizienten.

Defaultwert: 3.0

Wertevorschläge: 0.0, 1.0, 3.0, 5.0, 10.0, 30.0

Restriktion: Rho >= 0

ThetaThetaThetaThetatheta (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Zeitschritt.

Defaultwert: 0.5

Wertevorschläge: 0.1, 0.2, 0.3, 0.4, 0.5

Restriktion: 0 < Theta <= 0.5

IterationsIterationsIterationsIterationsiterations (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl Iterationen.

Defaultwert: 10

Wertevorschläge: 1, 5, 10, 20, 50, 100, 500

Restriktion: Iterations >= 1

Beispiel (HDevelop)

read_image (Image, 'fabrik')
gen_rectangle1 (Rectangle, 270, 180, 320, 230)
harmonic_interpolation (Image, Rectangle, InpaintedImage, 0.01)
inpainting_ced (InpaintedImage, Rectangle, InpaintedImage2, \
                0.5, 3.0, 0.5, 1000)
dev_display(InpaintedImage2)

Alternativen

harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolation, inpainting_ctinpainting_ctInpaintingCtInpaintingCtInpaintingCt, inpainting_anisoinpainting_anisoInpaintingAnisoInpaintingAnisoInpaintingAniso, inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcf, inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureInpaintingTexture

Literatur

J. Weickert, V. Hlavac, R. Sara; „Multiscale texture enhancement“; Computer analysis of images and patterns, Lecture Notes in Computer Science, Vol. 970, pp. 230-237; Springer, Berlin; 1995.
J. Weickert, B. ter Haar Romeny, L. Florack, J. Koenderink, M. Viergever; „A review of nonlinear diffusion filtering“; Scale-Space Theory in Computer Vision, Lecture Notes in Comp. Science, Vol. 1252, pp. 3-28; Springer, Berlin; 1997.

Modul

Foundation