Imagick::morphology
(No version information available, might only be in Git)
Imagick::morphology — Description
Description
public void Imagick::morphology ( int $morphologyMethod , int $iterations , ImagickKernel $ImagickKernel [, string $CHANNEL ] )
Applies a user supplied kernel to the image according to the given morphology method.
Parameters
morphologyMethod
Which morphology method to use one of the \Imagick::MORPHOLOGY_* constants.
iterations
The number of iteration to apply the morphology function. A value of -1 means loop until no change found. How this is applied may depend on the morphology method. Typically this is a value of 1.
ImagickKernel
CHANNEL
Return Values
Examples
Example #1 Convolve Imagick::morphology()
<?php
????????$imagick?=?$this->getCharacter();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_GAUSSIAN,?"5,1");
????????$imagick->morphology(\Imagick::MORPHOLOGY_CONVOLVE,?2,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$imagick->getImageBlob();
?>
Example #2 Correlate Imagick::morphology()
<?php
????????//?Top-left?pixel?must?be?black
????????//?Bottom?right?pixel?must?be?white
????????//?We?don't?care?about?the?rest.
????????
????????$imagick?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromMatrix(self::$correlateMatrix,?[2,?2]);
????????$imagick->morphology(\Imagick::MORPHOLOGY_CORRELATE,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$imagick->getImageBlob();
?>
Example #3 Erode Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"3");
????????$canvas->morphology(\Imagick::MORPHOLOGY_ERODE,?2,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #4 Erode Intensity Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacter();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"1");
????????$canvas->morphology(\Imagick::MORPHOLOGY_ERODE_INTENSITY,?2,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #5 Dilate Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"3");
????????$canvas->morphology(\Imagick::MORPHOLOGY_DILATE,?4,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #6 Dilate intensity Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacter();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"1");
????????$canvas->morphology(\Imagick::MORPHOLOGY_DILATE_INTENSITY,?4,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #7 Distance with Chebyshev kernel Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_CHEBYSHEV,?"3");
????????$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE,?3,?$kernel);
????????$canvas->autoLevelImage();
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #8 Distance with Manhattan kernel Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_MANHATTAN,?"5");
????????$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE,?3,?$kernel);
????????$canvas->autoLevelImage();
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #9 Distance with ocatagonal kernel Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGONAL,?"5");
????????$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE,?3,?$kernel);
????????$canvas->autoLevelImage();
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #10 Distance with Euclidean kernel Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_EUCLIDEAN,?"4");
????????$canvas->morphology(\Imagick::MORPHOLOGY_DISTANCE,?3,?$kernel);
????????$canvas->autoLevelImage();
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #11 Edge Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"3");
????????$canvas->morphology(\Imagick::MORPHOLOGY_EDGE,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #12 Open Imagick::morphology()
<?php
????????//?As?a?result?you?will?see?that?'Open'?smoothed?the?outline,?by?rounding?off?any?sharp?points,?and?remove?any?parts?that?is?smaller?than?the?shape?used.?It?will?also?disconnect?or?'open'?any?thin?bridges.
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK,?"6");
????????$canvas->morphology(\Imagick::MORPHOLOGY_OPEN,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #13 Open intensity Imagick::morphology()
<?php
????????//?As?a?result?you?will?see?that?'Open'?smoothed?the?outline,?by?rounding?off?any?sharp?points,?and?remove?any?parts?that?is?smaller?than?the?shape?used.?It?will?also?disconnect?or?'open'?any?thin?bridges.
????????$canvas?=?$this->getCharacter();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK,?"6");
????????$canvas->morphology(\Imagick::MORPHOLOGY_OPEN_INTENSITY,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #14 Close Imagick::morphology()
<?php
????????//The?basic?use?of?the?'Close'?method?is?to?reduce?or?remove?any?'holes'?or?'gaps'?about?the?size?of?the?kernel?'Structure?Element'.?That?is?'close'?parts?of?the?background?that?are?about?that?size.
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK,?"6");
????????$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #15 Close Intensity Imagick::morphology()
<?php
????????//The?basic?use?of?the?'Close'?method?is?to?reduce?or?remove?any?'holes'?or?'gaps'?about?the?size?of?the?kernel?'Structure?Element'.?That?is?'close'?parts?of?the?background?that?are?about?that?size.
????????$canvas?=?$this->getCharacter();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK,?"6");
????????$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE_INTENSITY,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #16 Smooth Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"3");
????????$canvas->morphology(\Imagick::MORPHOLOGY_SMOOTH,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #17 Edge in Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"3");
????????$canvas->morphology(\Imagick::MORPHOLOGY_EDGE_IN,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #18 Edge out Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON,?"3");
????????$canvas->morphology(\Imagick::MORPHOLOGY_EDGE_OUT,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #19 The 'TopHat' method, or more specifically 'White Top Hat', returns the pixels that were removed by a Opening of the shape, that is the pixels that were removed to round off the points, and the connecting bridged between shapes. Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK,?"5");
????????$canvas->morphology(\Imagick::MORPHOLOGY_TOP_HAT,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #20 The 'BottomHat' method, also known as 'Black TopHat' is the pixels that a Closing of the shape adds to the image. That is the the pixels that were used to fill in the 'holes', 'gaps', and 'bridges'. Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK,?"5");
????????$canvas->morphology(\Imagick::MORPHOLOGY_BOTTOM_HAT,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #21 Hit and Miss Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????//This?finds?all?the?pixels?with?3?pixels?of?the?right?edge
????????$matrix?=?[[1,?false,?false,?0]];
????????$kernel?=?\ImagickKernel::fromMatrix(
????????????$matrix,
????????????[0,?0]
????????);
????????$canvas->morphology(\Imagick::MORPHOLOGY_HIT_AND_MISS,?1,?$kernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #22 Thinning Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$leftEdgeKernel?=?\ImagickKernel::fromMatrix([[0,?1]],?[1,?0]);
????????$rightEdgeKernel?=?\ImagickKernel::fromMatrix([[1,?0]],?[0,?0]);
????????$leftEdgeKernel->addKernel($rightEdgeKernel);
????????
????????$canvas->morphology(\Imagick::MORPHOLOGY_THINNING,?3,?$leftEdgeKernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #23 Thicken Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$leftEdgeKernel?=?\ImagickKernel::fromMatrix([[0,?1]],?[1,?0]);
????????$rightEdgeKernel?=?\ImagickKernel::fromMatrix([[1,?0]],?[0,?0]);
????????$leftEdgeKernel->addKernel($rightEdgeKernel);
????????$canvas->morphology(\Imagick::MORPHOLOGY_THICKEN,?3,?$leftEdgeKernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #24 Thick to generate a convex hull Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$diamondKernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DIAMOND,?"1");
????????$convexKernel?=??\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_CONVEX_HULL,?"");
????????//?The?thicken?morphology?doesn't?handle?small?gaps.?We?close?them
????????//?with?the?close?morphology.
????????$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE,?1,?$diamondKernel);
????????$canvas->morphology(\Imagick::MORPHOLOGY_THICKEN,?-1,?$convexKernel);
????????$canvas->morphology(\Imagick::MORPHOLOGY_CLOSE,?1,?$diamondKernel);
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #25 Iterative morphology Imagick::morphology()
<?php
????????$canvas?=?$this->getCharacterOutline();
????????$kernel?=?\ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DISK,?"2");????????
????????$canvas->morphology(\Imagick::MORPHOLOGY_ITERATIVE,?3,?$kernel);
????????$canvas->autoLevelImage();
????????header("Content-Type:?image/png");
????????echo?$canvas->getImageBlob();
?>
Example #26 Helper functon to get an image silhouette Imagick::morphology()
<?php
????private?function?getCharacterOutline()?{
????????$imagick?=?new?\Imagick(realpath("./images/character.png"));
????????$character?=?new?\Imagick();
????????$character->newPseudoImage(
????????????$imagick->getImageWidth(),
????????????$imagick->getImageHeight(),
????????????"canvas:white"
????????);
????????$canvas?=?new?\Imagick();
????????$canvas->newPseudoImage(
????????????$imagick->getImageWidth(),
????????????$imagick->getImageHeight(),
????????????"canvas:black"
????????);
????????$character->compositeimage(
????????????$imagick,
????????????\Imagick::COMPOSITE_COPYOPACITY,
????????????0,?0
????????);
????????$canvas->compositeimage(
????????????$character,
????????????\Imagick::COMPOSITE_ATOP,
????????????0,?0
????????);
????????$canvas->setFormat('png');
????????return?$canvas;
????}
?>
← Imagick::morphImages
Imagick::mosaicImages →
? 1997–2017 The PHP Documentation Group
Licensed under the Creative Commons Attribution License v3.0 or later.
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com