【问题标题】:MATLAB ind2sub is not the inverse of sub2indMATLAB ind2sub 不是 sub2ind 的倒数
【发布时间】:2012-10-05 15:58:55
【问题描述】:

我实现了一个图像处理算法,它需要用一条线扫描图像。我将线的有效点生成为两个向量:lx_validly_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');

【问题讨论】:

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

标签: matlab


【解决方案1】:

我解决了这个问题:由 sub2ind 生成的索引已饱和,并以 uint16 静默返回。如果我将参数转换为双精度,sub2ind 会返回一个足以容纳索引的双精度值。

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');

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 2020-07-12
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多