http://mobigroup.ru/debian/pool-squeeze ... med3d-bin/
Документацию пока не выкладывал, равно как и примеры снимков. Ежели у кого есть снимки, которые можно опубликовать и по которым получаются интересные результаты - выкладывайте здесь ссылки, с описанием, что на снимке, кому он принадлежит и под какой лицензией публикуется. Скрипт для построения вертикального разреза приведен ниже:
Код: Выделить всё
#!/bin/sh
# скрипт построения вертикального разреза
# глубина в метрах = 0.7*R*(разрешение исходного изображения)
# для работы скрипта нужен установленный ImageMagick и пакет geomed3d
set -e
# исходное изображение
IMAGE=sample.tif
# размер исходного изображения, пикселов
WIDTH=3217
HEIGHT=2782
# глубина построения разреза, шагов
R=300
# удалить файлы предыдущего запуска
rm -f v_min.grad.tif v_mode.grad.tif
# преобразуем исходное изображение в RAW массив
convert -depth 8 "$IMAGE" gray:in.raw
# строим маску
geomed3d_mask $WIDTH $HEIGHT 0 0.5 1 0.5 > v_mask
# размер маски в пикселях (каждому пикселу соответствует отдельная строка в файле маски)
LENGTH=$(cat v_mask | wc -l)
# построить вертикальное сечение (фокальная статистика)
cat v_mask | geomed3d $WIDTH 0 $R in.raw v_min.raw v_mode.raw
# определим размерности полученного массива
W=$LENGTH
H=$((R+1))
# посчитать градиент
geomed3d_grad $LENGTH v_min.raw v_min.grad.raw
geomed3d_grad $LENGTH v_mode.raw v_mode.grad.raw
# для просмотра
convert -size ${W}x${H} -depth 8 gray:v_min.grad.raw v_min.grad.tif
convert -size ${W}x${H} -depth 8 gray:v_mode.grad.raw v_mode.grad.tif
# удалить временные файлы
rm -f in.raw v_mask v_min.raw v_mode.raw v_min.grad.raw v_mode.grad.raw
# готово! смотреть файлы v_min.grad.tif и v_mode.grad.tif
Вопросы, пожелания, предложения - приветствуются.
Upd. Параметры построения маски 0 0.5 1 0.5 в команде "geomed3d_mask $WIDTH $HEIGHT 0 0.5 1 0.5 > v_mask" это относительные координаты двух точек сечения X1 Y1 X2 Y2 и означают, что сечение будет проходить посередине снимка от левого до правого края. Для сечения посередине снимка сверху и донизу следует указать "geomed3d_mask $WIDTH $HEIGHT 0.5 0 0.5 1> v_mask", а для диагонального сечения из верхнего левого угла в нижний правый - "geomed3d_mask $WIDTH $HEIGHT 0 0 1 1 > v_mask".