C++AMP Computing gradient using texture on a 16 bit image

前端 未结 1 1751
-上瘾入骨i
-上瘾入骨i 2021-01-21 13:21

I am working with depth images retrieved from kinect which are 16 bits. I found some difficulties on making my own filters due to the index or the size of the images. I am worki

相关标签:
1条回答
  • 2021-01-21 13:49

    Your indexes are swapped in two places.

    int x = idx[0];
    int y = idx[1];
    

    Remember that C++AMP uses row-major indices for arrays. Thus idx[0] refers to row, y axis. This is why the picture you have for "For x" looks like what I would expect for texR.set(idx, valY).

    Similarly the extent of image is also using swapped values.

    int valX = (x / (float)imageSize[0]) * 65535;
    int valY = (y / (float)imageSize[1]) * 65535;
    

    Here imageSize[0] refers to the number of columns (the y value) not the number of rows.

    I'm not familiar with OpenCV but I'm assuming that it also uses a row major format for cv::Mat. It might invert the y axis with 0, 0 top-left not bottom-left. The Kinect data may do similar things but again, it's row major.

    There may be other places in your code that have the same issue but I think if you double check how you are using index and extent you should be able to fix this.

    0 讨论(0)
提交回复
热议问题