KlassenKlassenKlassenKlassen | | | | Operatoren

mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage (Operator)

Name

mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage — Glättung durch Mittelwertbildung.

Signatur

mean_image(Image : ImageMean : MaskWidth, MaskHeight : )

Herror mean_image(const Hobject Image, Hobject* ImageMean, const Hlong MaskWidth, const Hlong MaskHeight)

Herror T_mean_image(const Hobject Image, Hobject* ImageMean, const Htuple MaskWidth, const Htuple MaskHeight)

Herror mean_image(Hobject Image, Hobject* ImageMean, const HTuple& MaskWidth, const HTuple& MaskHeight)

HImage HImage::MeanImage(const HTuple& MaskWidth, const HTuple& MaskHeight) const

HImageArray HImageArray::MeanImage(const HTuple& MaskWidth, const HTuple& MaskHeight) const

void MeanImage(const HObject& Image, HObject* ImageMean, const HTuple& MaskWidth, const HTuple& MaskHeight)

HImage HImage::MeanImage(Hlong MaskWidth, Hlong MaskHeight) const

void HOperatorSetX.MeanImage(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageMean, [in] VARIANT MaskWidth, [in] VARIANT MaskHeight)

IHImageX* HImageX.MeanImage(
[in] Hlong MaskWidth, [in] Hlong MaskHeight)

static void HOperatorSet.MeanImage(HObject image, out HObject imageMean, HTuple maskWidth, HTuple maskHeight)

HImage HImage.MeanImage(int maskWidth, int maskHeight)

Beschreibung

mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage führt eine lineare Glättung mit den Grauwerten aller Eingabebilder (ImageImageImageImageImageimage) durch. Die Filtermatrix besteht aus Einsen (gleich gewichtet) und hat die Größe MaskHeight x MaskWidth. Das Ergebnis der Konvolution wird durch MaskHeight x MaskWidth dividiert. Als Randbehandlung werden die Grauwerte an den Bildrändern gespiegelt.

Für mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage sind spezielle Optimierungen unter Verwendung von SIMD Technologie implementiert. Ob diese tatsächlich zur Anwendung kommen, kann über den Systemparameter 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" (siehe set_systemset_systemSetSystemset_systemSetSystemSetSystem) gesteuert werden. Falls 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" auf 'true'"true""true""true""true""true" gesetzt wird (und die verwendete Hardware SIMD Technologie unterstützt), wird die Berechnung intern unter Verwendung von SIMD Technologie durchgeführt. Es ist zu beachten, dass der Beschleunigungseffekt von SIMD Technologie bei großen, kompakten Eingaberegionen am größten ist. Im Einzelfall kann aber die Ausführung von mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage, abhängig von der Eingaberegion und den Hardwareeigenschaften, mit SIMD Technologie auch länger dauern als ohne.

In jedem Falle wirkt es sich günstig auf das Laufzeitverhalten von mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage aus, wenn man die Eingaberegion von ImageImageImageImageImageimage so wählt, dass es zu keiner Randbehandlung kommt.

Achtung

Werden für MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight oder MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth gerade statt ungerade Werte übergeben, verwendet die Routine an ihrer Stelle die nächstgrößeren ungeraden Werte (damit ist der Schwerpunkt der Filtermaske immer eindeutig bestimmt).

mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage kann für byte-, int2-, uint2-, int4- und real-Bilder auf OpenCL Geräten ausgeführt weden, wenn MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight kleiner als zweimal die Höhe von ImageImageImageImageImageimage ist. Der OpenCL Code berechnet die Filterantwort intern mit 32 bit Integerarithmetik (für real-Bilder wird einfach genaue Fließkommaarithmetik verwendet). Dies kann zu Überläufen (und damit zu fehlerhaften Ergebnissen) führen, wenn der gesamte Wertebereich von int4- oder real-Bildern verwendet wird. Da zur Verbesserung der Laufzeit für eine MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth größer 9 ein vollständiger Scan jeder Zeile von ImageImageImageImageImageimage berechnet wird, kann es in diesem Fall auch bei byte-, int2- oder uint2-Bildern zu Überläufen kommen, wenn ImageImageImageImageImageimage sehr breit ist. In solchen Fällen muß die CPU-Version von mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage verwendet werden.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte* / int2* / uint2* / int4* / int8 / real* / vector_field) *erlaubt für Compute Devices

Zu glättendes Bild.

ImageMeanImageMeanImageMeanImageMeanImageMeanimageMean (output_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject * (byte / int2 / uint2 / int4 / int8 / real / vector_field)

Geglättetes Bild.

MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth (input_control)  extent.x HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Breite der Filtermaske.

Defaultwert: 9

Wertevorschläge: 3, 5, 7, 9, 11, 15, 23, 31, 43, 61, 101

Typischer Wertebereich: 1 ≤ MaskWidth MaskWidth MaskWidth MaskWidth MaskWidth maskWidth ≤ 501

Minimale Schrittweite: 2

Empfohlene Schrittweite: 2

Restriktion: odd(MaskWidth)

MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight (input_control)  extent.y HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Höhe der Filtermaske.

Defaultwert: 9

Wertevorschläge: 3, 5, 7, 9, 11, 15, 23, 31, 43, 61, 101

Typischer Wertebereich: 1 ≤ MaskHeight MaskHeight MaskHeight MaskHeight MaskHeight maskHeight ≤ 501

Minimale Schrittweite: 2

Empfohlene Schrittweite: 2

Restriktion: odd(MaskHeight)

Beispiel (HDevelop)

read_image(Image,'fabrik')
mean_image(Image,Mean,3,3)
dev_display(Mean)

Beispiel (C)

read_image(&Image,"fabrik");
mean_image(Image,&Mean,3,3);
disp_image(Mean,WindowHandle);

Beispiel (HDevelop)

read_image(Image,'fabrik')
mean_image(Image,Mean,3,3)
dev_display(Mean)

Beispiel (HDevelop)

read_image(Image,'fabrik')
mean_image(Image,Mean,3,3)
dev_display(Mean)

Beispiel (HDevelop)

read_image(Image,'fabrik')
mean_image(Image,Mean,3,3)
dev_display(Mean)

Beispiel (HDevelop)

read_image(Image,'fabrik')
mean_image(Image,Mean,3,3)
dev_display(Mean)

Komplexität

Pro Bildpunkt: O(15).

Ergebnis

Sind die Parameterwerte korrekt, dann liefert mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

reduce_domainreduce_domainReduceDomainreduce_domainReduceDomainReduceDomain, rectangle1_domainrectangle1_domainRectangle1Domainrectangle1_domainRectangle1DomainRectangle1Domain

Nachfolger

dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing

Alternativen

binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter, smooth_imagesmooth_imageSmoothImagesmooth_imageSmoothImageSmoothImage

Siehe auch

anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusion, sigma_imagesigma_imageSigmaImagesigma_imageSigmaImageSigmaImage, convol_imageconvol_imageConvolImageconvol_imageConvolImageConvolImage, gen_lowpassgen_lowpassGenLowpassgen_lowpassGenLowpassGenLowpass

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren