inpainting_cedinpainting_cedInpaintingCedInpaintingCedinpainting_ced (Operator)

Name

inpainting_cedinpainting_cedInpaintingCedInpaintingCedinpainting_ced — 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)

def inpainting_ced(image: HObject, region: HObject, sigma: float, rho: float, theta: float, iterations: int) -> HObject

Beschreibung

Der Operator inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCedinpainting_ced führt einen anisotropen Diffusionsvorgang in der Region RegionRegionRegionRegionregionregion des Eingabebildes ImageImageImageImageimageimage durch mit dem Ziel, durch Verstärkung der Kohärenz der in ImageImageImageImageimageimage 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_diffCoherenceEnhancingDiffCoherenceEnhancingDiffCoherenceEnhancingDiffcoherence_enhancing_diff, der auf einer Diskretisierung der anisotropen Diffusionsgleichung nach Weickert beruht. Diese Gleichung, mit einer von den Grauwerten in ImageImageImageImageimageimage abhängigen 2x2 Koeffizientenmatrix G, ist eine Verallgemeinerung der Krümmungsfluss- oder intrinsischen Wärmeleitungsgleichung mit der durch das Eingabebild ImageImageImageImageimageimage zu einem Zeitpunkt definierten Grauwertfunktion u. Der Operator mean_curvature_flowmean_curvature_flowMeanCurvatureFlowMeanCurvatureFlowMeanCurvatureFlowmean_curvature_flow ist eine direkte Anwendung der Krümmungsflussgleichung, mit Hilfe des Operators inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcfinpainting_mcf, kann sie auch für das Image Inpainting genutzt werden. Die diskrete Gleichung wird in IterationsIterationsIterationsIterationsiterationsiterations Zeitschritten der Länge ThetaThetaThetaThetathetatheta gelöst, so dass das Ausgabebild InpaintedImageInpaintedImageInpaintedImageInpaintedImageinpaintedImageinpainted_image 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 SigmaSigmaSigmaSigmasigmasigma bestimmt die Stärke dieser Glättung als Standardabweichung des zugehörigen Gauß-Faltungskernes, wie er auch im Operator isotropic_diffusionisotropic_diffusionIsotropicDiffusionIsotropicDiffusionIsotropicDiffusionisotropic_diffusion zur isotropen Glättung eines Bildes verwendet wird.

Ebenso wie im Operator inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcfinpainting_mcf wird hier die Struktur der Bilddaten in RegionRegionRegionRegionregionregion 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_mcfInpaintingMcfInpaintingMcfInpaintingMcfinpainting_mcf gegeben wird durch wobei I die Einheitsmatrix bezeichnet, wird die Matrix in inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCedinpainting_ced komponentenweise in Ortsrichtung durch einen Gaußfilter mit Standardabweichung RhoRhoRhoRhorhorho 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_mcfInpaintingMcfInpaintingMcfInpaintingMcfinpainting_mcf also alleine durch die lokale Richtung des Grauwertgradienten bestimmt, wohingegen die makroskopische Struktur der Bildobjekte auf der Skala RhoRhoRhoRhorhorho wiedergibt und die Stärke der Diffusion in inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCedinpainting_ced 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 RegionRegionRegionRegionregionregion gespiegelt, um die Glättung mit der Filtermaske zum Wert RhoRhoRhoRhorhorho auf den randnahen Pixeln durchzuführen. Stattdessen wird die Existenz von Grauwerten auf einem ceil(3.1*Rho)+2 Pixel breiten Streifen um RegionRegionRegionRegionregionregion vorausgesetzt und diese Werte bei der Anwendung der Faltungsmaske mitverwendet. Das bedeutet, RegionRegionRegionRegionregionregion muss mindestens diesen Abstand zum Rand der Bildmatrix ImageImageImageImageimageimage 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 ImageImageImageImageimageimage liegen. Umfasst diese nicht die gesamte Region RegionRegionRegionRegionregionregion, so wird ein Streifen um die Schnittmenge aus RegionRegionRegionRegionregionregion 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 RegionRegionRegionRegionregionregion vor Aufruf von inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCedinpainting_ced durch den Operator harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolationharmonic_interpolation 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

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.

SigmaSigmaSigmaSigmasigmasigma (input_control)  real HTuplefloatHTupleHtuple (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

RhoRhoRhoRhorhorho (input_control)  real HTuplefloatHTupleHtuple (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

ThetaThetaThetaThetathetatheta (input_control)  real HTuplefloatHTupleHtuple (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

IterationsIterationsIterationsIterationsiterationsiterations (input_control)  integer HTupleintHTupleHtuple (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_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolationharmonic_interpolation, inpainting_ctinpainting_ctInpaintingCtInpaintingCtInpaintingCtinpainting_ct, inpainting_anisoinpainting_anisoInpaintingAnisoInpaintingAnisoInpaintingAnisoinpainting_aniso, inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcfinpainting_mcf, inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureInpaintingTextureinpainting_texture

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