Я пытаюсь конвертировать это Imagemagick скрипт очистки доски на чистый PHP, используя расширение imagick, чтобы избежать необходимости порождать процессы с exec
или т.п.
Оригинальный скрипт bash:
#!/bin/bash
convert $1 -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 $2
Я борюсь с исходной матрицей ядра морфологии Convolve, кажется, все остальное работает:
<?php
$channel = null;
$convolveKernel = array(15, 100, 0);
$negateGreys = false;
$blurRadius = 0;
$blurSigma = 1;
$levelBlack = 60; // 60%
$levelGamma = 0.1;
$levelWhite = 91; // 91%
$image = new Imagick($file);
try {
$image->convolveImage($convolveKernel, $channel);
$image->negateImage($negateGreys, $channel);
$image->normalizeImage($channel);
$image->blurImage($blurRadius, $blurSigma, $channel);
$image->levelImage($levelBlack, $levelGamma, $levelWhite, $channel);
header('Content-type: image/jpeg');
echo $image;
} catch (ImagickException $e) {
echo $e->getMessage();
}
Я получаю исключение "The kernel must contain a square number of elements"
но меня также интересует масштаб значений уровня черного и белого — это 0-100, 0-255 или 0-65535?
Расширение PECL Imagick не реализует (или использовать) MagickWand’s MagickMorphologyImage
, который является интерфейсом для -morphology Convolve DoG:15,100,0
флаг в оригинальной команде.
Использовать convolveImage
, Вы будете скорее всего нужно использовать нечетную матрицу:
Ядро — это матрица, указанная в виде списка целых чисел (без пробелов), разделенных запятыми, упорядоченных слева направо, начиная с верхней строки. В настоящее время поддерживаются только нечетные ядра, и поэтому количество записей в указанном ядре должно быть 32= 9, 52= 25,72= 49 и т. Д.
Но я не думаю, что вы сможете воссоздать его как таковой (по крайней мере, не так качественно, как оригинал), поскольку в флаге оригинала используется вычисленная свертка Разница гауссов (DoG
), который вы не сможете воссоздать, используя более простую, более примитивную свертку.
Других решений пока нет …