Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB ind2sub不是sub2ind的逆_Matlab - Fatal编程技术网

MATLAB ind2sub不是sub2ind的逆

MATLAB ind2sub不是sub2ind的逆,matlab,Matlab,我实现了一个图像处理算法,需要用一条线扫描图像。我将线的有效点生成为两个向量:lx\u valid,和ly\u valid。然后我用sub2ind生成线性索引,并绘制结果。如您所见,我的线与对象明显相交,但运行代码后,locmax==0。坐标均有效(在图像内);但我得到了一个更奇怪的结果:如果我将坐标生成为ind2sub(size(Im),c),我甚至不会返回坐标。我肯定是小东西,但我拿不到 valid = lx >= 1 & size(Im, 2) >= lx &

我实现了一个图像处理算法,需要用一条线扫描图像。我将线的有效点生成为两个向量:
lx\u valid
,和
ly\u valid
。然后我用
sub2ind
生成线性索引,并绘制结果。如您所见,我的线与对象明显相交,但运行代码后,
locmax==0
。坐标均有效(在图像内);但我得到了一个更奇怪的结果:如果我将坐标生成为
ind2sub(size(Im),c)
,我甚至不会返回坐标。我肯定是小东西,但我拿不到

valid = lx >= 1 & size(Im, 2) >= lx & ly >= 1 & size(Im, 1) >= ly;
lx_valid = lx(valid);
ly_valid = ly(valid);
c = sub2ind(size(Im), ly_valid, lx_valid);
locmax = max(Im(c));
imshow(Im);plot(lx_valid,ly_valid,'go');

我解决了这个问题:sub2ind生成的索引被统计,并作为uint16无声地返回。如果我将参数转换为double,sub2ind将返回一个double值,该值对于索引来说足够大

valid = lx >= 1 & size(Im, 2) >= lx & ly >= 1 & size(Im, 1) >= ly; 
lx_valid = double(lx(valid)); 
ly_valid = double(ly(valid)); 
c = sub2ind(size(Im), ly_valid, lx_valid); 
locmax = max(Im(c)); 
imshow(Im);plot(lx_valid,ly_valid,'go');

你能打印尺寸(Im)吗?(以防万一是3d)有趣。我生成了一些合成数据,对我来说效果很好。也许您可以在代码中添加
Im
生成?也许像奥利建议的那样,
Im
是3D的?