Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Pixel tensors as matrix of matrices

Hello!

I want to calculate the structure tensor of an image, so I need to store one 2-by-2 matrix for each pixel of the image, and I am wondering what is the best way to do this. Optimally, I would like to be able to do tensors(3,4) to get a Mat(2,2) object containing the tensor at position (3,4) in the image. I tried variants of

Mat_<Mat_<int> > tt(10, 10);
tt(0,3).create(2, 2);

But it fails with a segmentation fault when trying to create the 2-by-2 tensor

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7abf5b9 in cv::Mat::create(int, int const*, int) ()
   from /usr/lib/libopencv_core.so.2.4
(gdb) bt
#0  0x00007ffff7abf5b9 in cv::Mat::create(int, int const*, int) ()
   from /usr/lib/libopencv_core.so.2.4
#1  0x0000000000403576 in cv::Mat::create (this=0x654870, _rows=2, _cols=2, 
    _type=4) at /usr/include/opencv2/core/mat.hpp:353
#2  0x0000000000403937 in cv::Mat_<int>::create (this=0x654870, _rows=2, 
    _cols=2) at /usr/include/opencv2/core/mat.hpp:910
#3  0x0000000000402e7a in main (argc=5, argv=0x7fffffffe408)
    at /home/burk/dev/image-restoration/sobel.cpp:100

I'm sure I'm just missing something trivial in one of the constructors, but I feel like I have tried everything!