inpainting_anisoinpainting_anisoInpaintingAnisoInpaintingAnisoinpainting_aniso (Operator)

Name

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

def inpainting_aniso(image: HObject, region: HObject, mode: str, contrast: float, theta: float, iterations: int, rho: float) -> HObject

Beschreibung

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

Dadurch kann die Struktur der Bildkanten in RegionRegionRegionRegionregionregion 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 ImageImageImageImageimageimage definierten Anfangswert zu einem Zeitpunkt . Die Gleichung wird dabei IterationsIterationsIterationsIterationsiterationsiterations mal in Zeitschritten der Länge ThetaThetaThetaThetathetatheta iteriert, so dass das Ausgabebild InpaintedImageInpaintedImageInpaintedImageInpaintedImageinpaintedImageinpainted_image 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 Schwellenwert ContrastContrastContrastContrastcontrastcontrast für die Größe der Grauwertdifferenz zwischen benachbarten Pixeln getroffen. ContrastContrastContrastContrastcontrastcontrast 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 RegionRegionRegionRegionregionregion hinein fortzusetzen. Die Standardabweichung dieses Glättungsvorganges wird durch den Parameter RhoRhoRhoRhorhorho bestimmt.

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

Das Ergebnis des Diffusionsvorganges ist auch hier abhängig von den Grauwerten im Rechengebiet des Eingabebildes ImageImageImageImageimageimage. Es ist zu beachten, dass bereits vorhandene Bildkanten dort erhalten werden. Dies gilt insbesondere auch für Grauwertsprünge am Rand von RegionRegionRegionRegionregionregion, die etwa durch Inpainting mit einem konstanten Grauwert entstehen. Soll das Verfahren zum Inpainting verwendet werden, empfiehlt es sich, zuvor den Operator harmonic_interpolationharmonic_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolationharmonic_interpolation 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 RegionRegionRegionRegionregionregion 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 ModeModeModeModemodemode stehen die folgenden Funktionen zur Verfügung: Die Wahl der Funktion , wenn ModeModeModeModemodemode auf 'parabolic'"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 ThetaThetaThetaThetathetatheta 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""perona-malik" für ModeModeModeModemodemode 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 ModeModeModeModemodemode='weickert'"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 ModeModeModeModemodemode noch der Wert 'shock'"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 ContrastContrastContrastContrastcontrastcontrast 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_diffusionIsotropicDiffusionIsotropicDiffusionIsotropicDiffusionisotropic_diffusion verwendet wird. Der Parameter ist so skaliert, dass sich Diffusion und Schärfung für ContrastContrastContrastContrastcontrastcontrast=1 gerade aufheben. Ein Wert ContrastContrastContrastContrastcontrastcontrast>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

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.

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

Art des Kantenschärfungsalgorithmus.

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

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

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

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

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

Anzahl Iterationen.

Defaultwert: 10

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

Restriktion: Iterations >= 1

RhoRhoRhoRhorhorho (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Glättungskoeffizient 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_interpolationHarmonicInterpolationHarmonicInterpolationHarmonicInterpolationharmonic_interpolation, inpainting_ctinpainting_ctInpaintingCtInpaintingCtInpaintingCtinpainting_ct, inpainting_mcfinpainting_mcfInpaintingMcfInpaintingMcfInpaintingMcfinpainting_mcf, inpainting_textureinpainting_textureInpaintingTextureInpaintingTextureInpaintingTextureinpainting_texture, inpainting_cedinpainting_cedInpaintingCedInpaintingCedInpaintingCedinpainting_ced

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