Imagick::forwardFourierTransformImage

離散フーリエ変換 (DFT) を実行する

説明

public bool Imagick::forwardFourierTransformimage(bool $magnitude)

画像の離散フーリエ変換 (DFT) を、振幅/位相のペアまたは実数/虚数の画像ペアとして実行します。

パラメータ

magnitude

true の場合は振幅/位相のペアとして返し、それ以外の場合は実数/虚数の画像ペアとして返します。

戻り値

成功した場合に true を返します。

例1 Imagick::forwardFourierTransformImage

<?php
//forwardTransformImage のユーティリティ関数
function createMask() {
    $draw = new \ImagickDraw();

    $draw->setStrokeOpacity(0);
    $draw->setStrokeColor('rgb(255, 255, 255)');
    $draw->setFillColor('rgb(255, 255, 255)');

    //y 軸上に、中心が x, y にあり
    //原点に接する円を描画する
    $draw->circle(250, 250, 220, 250);

    $imagick = new \Imagick();
    $imagick->newImage(512, 512, "black");
    $imagick->drawImage($draw);
    $imagick->gaussianBlurImage(20, 20);
    $imagick->autoLevelImage();

    return $imagick;
}


function forwardFourierTransformImage($imagePath) {
    $imagick = new \Imagick(realpath($imagePath));
    $imagick->resizeimage(512, 512, \Imagick::FILTER_LANCZOS, 1);

    $mask = createMask();
    $imagick->forwardFourierTransformImage(true);

    @$imagick->setimageindex(0);
    $magnitude = $imagick->getimage();

    @$imagick->setimageindex(1);
    $imagickPhase = $imagick->getimage();

    if (true) {
        $imagickPhase->compositeImage($mask, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
    }

    if (false) {
        $output = clone $imagickPhase;
        $output->setimageformat('png');
        header("Content-Type: image/png");
        echo $output->getImageBlob();
    }

    $magnitude->inverseFourierTransformImage($imagickPhase, true);

    $magnitude->setimageformat('png');
    header("Content-Type: image/png");
    echo $magnitude->getImageBlob();
}

?>