inpainting_anisoinpainting_anisoInpaintingAnisoInpaintingAniso (Operator)

Name

inpainting_anisoinpainting_anisoInpaintingAnisoInpaintingAniso — Inpainting eines Bildbereiches durch anisotrope Diffusion.

Signatur

inpainting_aniso(Image, Region : InpaintedImage : Mode, Contrast, Theta, Iterations, Rho : )

Herror inpainting_aniso(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, const char* Mode, double Contrast, double Theta, const Hlong Iterations, double Rho)

Herror T_inpainting_aniso(const Hobject Image, const Hobject Region, Hobject* InpaintedImage, const Htuple Mode, const Htuple Contrast, const Htuple Theta, const Htuple Iterations, const Htuple Rho)

void InpaintingAniso(const HObject& Image, const HObject& Region, HObject* InpaintedImage, const HTuple& Mode, const HTuple& Contrast, const HTuple& Theta, const HTuple& Iterations, const HTuple& Rho)

HImage HImage::InpaintingAniso(const HRegion& Region, const HString& Mode, double Contrast, double Theta, Hlong Iterations, double Rho) const

HImage HImage::InpaintingAniso(const HRegion& Region, const char* Mode, double Contrast, double Theta, Hlong Iterations, double Rho) const

HImage HImage::InpaintingAniso(const HRegion& Region, const wchar_t* Mode, double Contrast, double Theta, Hlong Iterations, double Rho) const   (Nur Windows)

static void HOperatorSet.InpaintingAniso(HObject image, HObject region, out HObject inpaintedImage, HTuple mode, HTuple contrast, HTuple theta, HTuple iterations, HTuple rho)

HImage HImage.InpaintingAniso(HRegion region, string mode, double contrast, double theta, int iterations, double rho)

Beschreibung

Der Operator inpainting_anisoinpainting_anisoInpaintingAnisoInpaintingAnisoInpaintingAniso nutzt die anisotrope Diffusion von Grauwerten nach dem Modell von Perona und Malik, um an die Bildregion RegionRegionRegionRegionregion des Eingabebildes ImageImageImageImageimage angrenzende Bildkanten in RegionRegionRegionRegionregion hinein fortzusetzen und zu verbinden.

Dadurch kann die Struktur der Bildkanten in RegionRegionRegionRegionregion konsistent zur umgebenden Bildmatrix gemacht werden, so dass eine Überdeckung von Fehlstellen oder Störobjekten im Eingabebild, ein sogenanntes Inpainting, für einen menschlichen Beobachter schwächer in Erscheinung tritt, da keine auffälligen Artefakte oder Schmiereffekte zurückbleiben.

Ordnet man dem Bild eine Grauwertfunktion u zu, so ist der Algorithmus eine Diskretisierung der partiellen Differentialgleichung mit dem durch ImageImageImageImageimage definierten Anfangswert zu einem Zeitpunkt . Die Gleichung wird dabei IterationsIterationsIterationsIterationsiterations mal in Zeitschritten der Länge ThetaThetaThetaThetatheta iteriert, so dass das Ausgabebild InpaintedImageInpaintedImageInpaintedImageInpaintedImageinpaintedImage die Grauwertfunktion zum Zeitpunkt enthält.

Ziel der anisotropen Diffusion, die auch als nichtlinear isotrope Diffusion bezeichnet wird, ist es ursprünglich, in flächigen Bildbereichen Bildstörungen wie Rauschen zu eliminieren, ohne dabei Bildkanten zu verwischen. Die Unterscheidung zwischen Kanten und Flächen wird durch den Schwellwert ContrastContrastContrastContrastcontrast für die Größe der Grauwertdifferenz zwischen benachbarten Pixeln getroffen. ContrastContrastContrastContrastcontrast wird auch als Kontrastparameter bezeichnet und mit c abgekürzt. Wird die Kanteninformation durch Glättung der Kantenamplitude in der Umgebung der bereits vorhandenen Kanten ausgebreitet, so ist es darüber hinaus möglich, die Kanten in das Rechengebiet RegionRegionRegionRegionregion hinein fortzusetzen. Die Standardabweichung dieses Glättungsvorganges wird durch den Parameter RhoRhoRhoRhorho bestimmt.

Der verwendete Algorithmus entspricht im Wesentlichen dem im anisotropen Diffusionsfilter anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusion, allerdings geschieht hier keine Randbehandlung durch Spiegelung der Grauwerte am Rand von RegionRegionRegionRegionregion. Stattdessen ist dieses Verfahren nur auf Regionen anwendbar, die einen Abstand von mindestens 3 Pixeln zum Rand der Bildmatrix von ImageImageImageImageimage einhalten, da die Grauwerte auf diesem Streifen um RegionRegionRegionRegionregion genutzt werden, um Randwerte für die verwendete Differentialgleichung zu definieren und so die Konsistenz zur Umgebung von RegionRegionRegionRegionregion herzustellen. Dabei 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.

Das Ergebnis des Diffusionsvorganges ist auch hier abhängig von den Grauwerten im Rechengebiet des Eingabebildes ImageImageImageImageimage. Es ist zu beachten, dass bereits vorhandene Bildkanten dort erhalten werden. Dies gilt insbesondere auch für Grauwertsprünge am Rand von RegionRegionRegionRegionregion, die etwa durch Inpainting mit einem konstanten Grauwert entstehen. Soll das Verfahren zum Inpainting verwendet werden, empfiehlt es sich, zuvor den Operator harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolation anzuwenden, um sämtliche störenden Kanten aus dem Rechengebiet zu entfernen und die maximale Grauwertdifferenz zwischen Nachbarpixeln zu minimieren, es sei denn das ursprüngliche Bild enthält in RegionRegionRegionRegionregion bereits Informationen, die erhalten werden sollen.

Der variable Diffusionskoeffizient g der Differentialgleichung kann verschiedenen monoton fallenden Funktionen mit Werten zwischen 0 und 1 folgen und bestimmt das Antwortverhalten des Diffusionsvorganges auf eine Kante. Über den Parameter ModeModeModeModemode stehen die folgenden Funktionen zur Verfügung: Die Wahl der Funktion , wenn ModeModeModeModemode auf 'parabolic'"parabolic""parabolic""parabolic""parabolic" gesetzt wird, garantiert, dass die zugehörige Differentialgleichung parabolisch ist, so dass eine Wohlgestelltheitstheorie für das Problem existiert und das Verfahren für beliebige Schrittweiten ThetaThetaThetaThetatheta stabil ist. In diesem Falle bleibt es aber bei einer leichten Diffusion auch über Kanten hinweg, deren Stärke c übersteigt. Die in der Veröffentlichung von Perona und Malik verwendete Funktion bei Wahl von 'perona-malik'"perona-malik""perona-malik""perona-malik""perona-malik" für ModeModeModeModemode besitzt nicht die theoretischen Eigenschaften von , hat sich in der Praxis aber dennoch als ausreichend stabil erwiesen. Die theoretische Instabilität zeigt sich in einer leichten Schärfung von starken Kanten. Die von Weickert vorgeschlagene Wahl bei ModeModeModeModemode='weickert'"weickert""weickert""weickert""weickert" mit der Konstanten C=3.31488 ist eine Steigerung von im Bezug auf die Kantenschärfe. Der Übergang zwischen Glättung und Schärfung erfolgt hier sehr abrupt an der Stelle x = c^2.

Darüber hinaus ist für ModeModeModeModemode noch der Wert 'shock'"shock""shock""shock""shock" möglich, durch den eine kontrastinvariante Abwandlung der anisotropen Diffusion gewählt wird. In dieser Variante wird die Erzeugung von Kanten nicht durch die Variation des Diffusionskoeffizienten g erreicht, sondern ein konstanter Koeffizient g=1 und damit isotrope Diffusion verwendet. Zusätzlich wird ein Schockfilter vom Typ eingesetzt, der ebenso wie ein negativer Diffusionskoeffizient der Kantenschärfung dient, diese Schärfung aber unabhängig vom Absolutwert von bewirkt. In diesem Modus hat ContrastContrastContrastContrastcontrast nicht die Bedeutung eines Kontrastparameters, sondern bestimmt das Verhältnis zwischen Diffusions- und Schockfilteranteil in jedem Iterationsschritt. Der Wert 0 entspräche demnach reiner isotroper Diffusion, wie sie im Operator isotropic_diffusionisotropic_diffusionIsotropicDiffusionIsotropicDiffusionIsotropicDiffusion verwendet wird. Der Parameter ist so skaliert, dass sich Diffusion und Schärfung für ContrastContrastContrastContrastcontrast=1 gerade aufheben. Ein Wert ContrastContrastContrastContrastcontrast>1 sollte nicht verwendet werden, da das Verfahren dadurch instabil wird.

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.

ModeModeModeModemode (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Art des Kantenschärfungsalgorithmus.

Defaultwert: 'weickert' "weickert" "weickert" "weickert" "weickert"

Werteliste: 'parabolic'"parabolic""parabolic""parabolic""parabolic", 'perona-malik'"perona-malik""perona-malik""perona-malik""perona-malik", 'shock'"shock""shock""shock""shock", 'weickert'"weickert""weickert""weickert""weickert"

ContrastContrastContrastContrastcontrast (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Kontrastparameter.

Defaultwert: 5.0

Wertevorschläge: 0.5, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0

Restriktion: Contrast > 0

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

Schrittweite.

Defaultwert: 0.5

Wertevorschläge: 0.5, 1.0, 5.0, 10.0, 30.0, 100.0

Restriktion: Theta > 0

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

Anzahl Iterationen.

Defaultwert: 10

Wertevorschläge: 1, 3, 10, 100, 500

Restriktion: Iterations >= 1

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

Glättungkoeffizient für Kanteninformation.

Defaultwert: 3.0

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

Restriktion: Rho >= 0

Beispiel (HDevelop)

read_image (Image, 'fabrik')
gen_rectangle1 (Rectangle, 270, 180, 320, 230)
harmonic_interpolation (Image, Rectangle, InpaintedImage, 0.01)
inpainting_aniso (InpaintedImage, Rectangle, InpaintedImage2, \
                  'perona-malik', 5.0, 100, 50, 0.5)
dev_display(InpaintedImage2)

Alternativen

harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolation, inpainting_ctinpainting_ctInpaintingCtInpaintingCtInpaintingCt, inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcf, inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureInpaintingTexture, inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCed

Literatur

J. Weickert; „Anisotropic Diffusion in Image Processing“; PhD Thesis; Fachbereich Mathematik, Universität Kaiserslautern; 1996.
P. Perona, J. Malik; „Scale-space and edge detection using anisotropic diffusion“; Transactions on Pattern Analysis and Machine Intelligence 12(7), pp. 629-639; IEEE; 1990.
G. Aubert, P. Kornprobst; „Mathematical Problems in Image Processing“; Applied Mathematical Sciences 147; Springer, New York; 2002.

Modul

Foundation