编程形态开放返回输入

时间:2016-10-04 12:45:54

标签: halide

我正在编程形态开放,它返回的结果与输入图像相同。我误解了它的解释吗?我的代码是:

INSERT INTO MY_TABLE (ID,
                  CODE,
                  NAME,
                  PARENT)
SELECT NEW_ID, CODE, NAME, NVL(PRIOR NEW_ID, :NEWPARENT) 
FROM (
  SELECT A.*, MY_TABLE_SEC.NEXTVAL NEW_ID 
  FROM MY_TABLE A 
  START WITH PARENT=:OLDPARENT 
  CONNECT BY NOCYCLE PRIOR ID = PARENT
) A
START WITH PARENT=:OLDPARENT 
CONNECT BY NOCYCLE PRIOR ID = PARENT

1 个答案:

答案 0 :(得分:2)

以下似乎与我的OpenCV教程图像产生类似的结果:

#include "Halide.h"
#include "../../tools/halide_image_io.h"

using namespace Halide;

int main(int argc, char **argv) {
    Var x, y;
    Func limit, erosion, dilation;

    ImageParam input(type_of<uint8_t>(), 2);
    Param<int> dimension;

    RDom r(-1 * dimension / 2, dimension, -1 * dimension / 2, dimension);
    limit = BoundaryConditions::repeat_edge(input);

#if 0
    erosion(x, y) = minimum(limit(x + r.x, y + r.y), "erosion");
    dilation(x, y) = maximum(erosion(x + r.x, y + r.y), "dilation");
#else
    erosion(x, y) = argmin(r, limit(x + r.x, y + r.y), "erosion")[2];
    dilation(x, y) = argmax(r, erosion(x + r.x, y + r.y), "dilation")[2];
#endif

    erosion.compute_root();
    dilation.vectorize(x, 4).parallel(y);

    Image<uint8_t> in = Halide::Tools::load_image("/some/path/morphology.png");
    input.set(in);
    dimension.set(10);

    Image<uint8_t> result = dilation.realize(in.width(), in.height());

    Halide::Tools::save_image(result, "/some/path/morphology_out.png");

    return 0;
}

#if 0块仅用于显示最小和最大运算符而不是argmin / argmax。 argmin / argmax的r参数也是可选的。

我会问你的错误是在于如何将图像传递给Halide AOT编译函数或者如何处理返回的输出。您还可以使用debug_to_file或在Halide代码中打印来调试管道的中间阶段。