【问题标题】:Regenerating a binary image in matlab在matlab中重新生成二值图像
【发布时间】:2015-08-07 07:50:11
【问题描述】:

我有一个二进制图像Im1

我想使用白色像素的索引重新生成相同的图像。

首先我创建了另一个图像Im2

Im2 = zeros(size(Im1,1),size(Im1,2));

然后我使用 find 提取了白色像素的索引:

[r , c] = find(Im1 == 1);

最后我将rc 替换为Im2 以重新生成Im1

Im2(r,c) = 1;

问题是重新生成的图像看起来不同:

Im1中的对象原来的形状是正方形而不是原来的形状是什么解释??

以及如何仅基于非零像素的索引重新生成Im1???

注意:当我使用以下代码时:

for j = 1:length(r)
Im2(r(j,1),c(j,1)) = 1;
end

Im2 重新生成正确!!!

【问题讨论】:

    标签: image matlab matrix


    【解决方案1】:

    您需要使用linear indexing:将您的行和列索引转换为线性

    ind = sub2ind(size(Im2), r,c);
    Im2(ind) = 1;
    

    或直接将索引提取为线性:

    ind = find(Im1 == 1);
    %// ...
    Im2(ind) = 1;
    

    另一种方法是使用 (linear-)logical indexing:

    ind = Im1==1;
    Im2(ind) = 1;
    

    在您的代码中,Im2(r,c) 指的是r 中的一个值和c 中的一个值的所有组合(笛卡尔积);这不是你想要的。线性索引(或线性逻辑索引)避免了这种情况,仅将r 中的一个值与c 中的一个值匹配。

    【讨论】:

      【解决方案2】:

      Matlab 中的索引有问题。

      如果您以Img(values,values2) 的身份访问某些内容,那么@LuisMendo 将在 cmets 中正确解释成对值的组合

      如果要选择特定的随机索引,最好使用线性索引:

      indexes=sub2ind(size(Img),r,c);
      Img(indexes)=1;
      

      【讨论】:

      • 只是一个小修正:Img(values,values2) 不会从最小值变为最大值;相反,它采用来自values 的一个值和来自values2 的一个值的所有组合
      猜你喜欢
      • 2011-09-15
      • 2014-07-03
      • 2014-04-07
      • 2018-06-05
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多