Я новичок в Halide, и мне был предоставлен конвейер обработки изображений. Я пытаюсь понять этот конвейер, печатая значения. Следуя руководству из https://halide-lang.org/tutorials/tutorial_lesson_04_debugging_2.html, я попытался распечатать значения. Это дает мне 2 типа ошибок.
1. Аргумент буфера in_patch равен NULL для transform.realize (512,256,3) .
2. 'Halide :: Internal :: GeneratorBase :: Input> {aka class Halide :: GeneratorInput>}' не имеет члена с именем «реализовать» для TsTw_tran_h.realize (3,3) ;
Я предполагаю, что вторая ошибка как-то связана с неиспользованием переменных x и y.
Есть ли способ обойти первую ошибку?
Любая помощь будет принята с благодарностью.
Заранее спасибо
#include "Halide.h"
namespace {
using namespace Halide;
///////////////////////// We will define a generator to auto-schedule.
class AutoScheduled : public Halide::Generator<AutoScheduled> {
public:
Input<Buffer<uint8_t>> in_patch {"in_patch" , 3};
Input<Buffer<float>> ctrl_pts_h {"ctrl_pts_h" , 2};
Input<Buffer<float>> weights_h {"weights_h" , 2};
Input<Buffer<float>> rev_tone_h {"rev_tone_h" , 2};
Input<Buffer<float>> TsTw_tran_h{"TsTw_tran_h", 2};
Input<Buffer<float>> coefs_h {"coefs_h" , 2};
Output<Buffer<uint8_t>> processed {"processed" , 3};
void generate() {
Var x("x"), y("y"), c("c");
Func scale("scale");
scale(x,y,c) = cast<float>(in_patch(x,y,c))/256;
// Color map and white balance transform
Func transform("transform");
transform(x,y,c) = select(
// Perform matrix multiplication, set min of 0
c == 0, scale(x,y,0) * TsTw_tran_h(0,0)
+ scale(x,y,1) * TsTw_tran_h(1,0)
+ scale(x,y,2) * TsTw_tran_h(2,0),
c == 1, scale(x,y,0) * TsTw_tran_h(0,1)
+ scale(x,y,1) * TsTw_tran_h(1,1)
+ scale(x,y,2) * TsTw_tran_h(2,1),
scale(x,y,0) * TsTw_tran_h(0,2)
+ scale(x,y,1) * TsTw_tran_h(1,2)
+ scale(x,y,2) * TsTw_tran_h(2,2) );
scale.compute_root();
transform.trace_stores();
scale.trace_stores();
TsTw_tran_h.realize(3,3);
transform.realize(512,256,3);
processed(x, y, c) = cast<uint8_t>( min( max( transform(x,y,c) * 255, 0), 255 ) );
}