Как инициализировать внешнее изображение с полями для свертки?

Ограничения: 1. Иметь указатель на изображение с полями размера (ImHeight,ImWidth) 2. Размер фильтра (FH,FW); FH,FW нечетные 3. ActualImageHeight = ImHeight-2*(FH/2); ActualImageWidth = ImWidth-2*(FW/2);

Как:

  1. Инициализировать изображение указателем таким образом, чтобы изображение (0,0) было пикселем (0,0), а не пикселем поля?
  2. Определите расписание, не используя граничные условия/зажимы, так как заданная память указателя изображения уже учитывает поля

person Ganesh Kumar M R    schedule 19.07.2016    source источник


Ответы (1)


Измените минимальную координату изображения. Вы не указали, используете ли вы JIT или AOT, но вот реализация JIT.

Halide::Image input( ImWidth + 2 * FW, ImHeight + 2 * FH ), output;
input.set_min( -FW, -FH );
Func f;
f(x,y) = ( input( x - FW, y - FH ) + input( x + FW - 1, y + FH - 1 ) ) / 2;
output = f.realize( ImWidth, ImHeight );

Для АОТ:

  • Используйте ImageParam вместо input.
  • Используйте Param<int> для ImWidth и ImHeight, чтобы они были параметрами функции AOT.
  • Используйте int для ImWidth и ImHeight, чтобы запечь их в функцию AOT.
  • Используйте set_bounds и set_stride для всех размеров input и f.output_buffer(). Они занимают Expr, поэтому примут ImWidth + 2 * FW, если ImWidth равно Param<int>.
person Khouri Giordano    schedule 19.07.2016
comment
Спасибо за ответ. Я неправильно устанавливал set_min. - person Ganesh Kumar M R; 20.07.2016