Я обработал ваше изображение сетки, выбрав контрольные точки на пересечениях сетки на входном и выходном изображении из Photoshop.Я использовал плагин ImageJ pointpicker, чтобы помочь мне выбрать и сохранить контрольные точки.См. http://bigwww.epfl.ch/thevenaz/pointpicker/
Затем я использовал полиномиальную деформацию 2-го порядка ImageMagick, используя эти контрольные точки.
Я поместил список контрольных точек в массив для входных и выходных изображений.Затем я объединил их в формате in1 out1 in2 out2 ... in16 out16 (как соответствующие пары).
inArr=(17,20
280,22
542,21
806,20
16,286
280,286
542,286
808,285
17,549
280,549
542,550
805,549
17,812
280,812
542,812
806,808)
outArr=(348,13
420,41
522,48
582,66
277,302
328,320
409,346
481,360
230,516
332,548
442,569
516,552
289,748
402,776
542,766
638,713)
list="2"
for ((i=0; i<16; i++)); do
list="$list ${inArr[$i]} ${outArr[$i]}"
done
echo $list
2 17,20 348,13 280,22 420,41 542,21 522,48 806,20 582,66 16,286 277,302 280,286 328,320 542,286 409,346 808,285 481,360 17,549 230,516 280,549 332,548 542,550 442,569 805,549 516,552 17,812 289,748 280,812 402,776 542,812 542,766 806,808 638,713
Обратите внимание, что первая запись выше - 2, что означает, что контрольные точки будутподгонка к полиному 2-го порядка.
Далее, перед искажением, я сделал область вне линий сетки прозрачной, чтобы внешняя область не отображалась на искаженном изображении.Я сделал это, заливая внешнюю черную область прозрачностью (не окрашивая).Используется искажение -virtual-pixel none, чтобы все, что находится за пределами входного изображения, было прозрачным.
convert grid.png -fuzz 10% -fill none -draw "matte 0,0 floodfill" -virtual-pixel none -distort polynomial "$list" grid_warp2.png
Вот третьеупорядочить результаты полинома:
list="3"
for ((i=0; i<16; i++)); do
list="$list ${inArr[$i]} ${outArr[$i]}"
done
echo $list
3 17,20 348,13 280,22 420,41 542,21 522,48 806,20 582,66 16,286 277,302 280,286 328,320 542,286 409,346 808,285 481,360 17,549 230,516 280,549 332,548 542,550 442,569 805,549 516,552 17,812 289,748 280,812 402,776 542,812 542,766 806,808 638,713
convert grid.png -fuzz 10% -fill none -draw "matte 0,0 floodfill" -virtual-pixel none -distort polynomial "$list" grid_warp3.png
Больше контрольных точек может дать более близкий результат, чем в Photoshop.