我有二进制图片Im1
我想使用白色像素的索引重新生成相同的图像。
首先我创建了另一张图片Im2
:
Im2 = zeros(size(Im1,1),size(Im1,2));
然后我使用 find :
提取了白色像素的索引[r , c] = find(Im1 == 1);
最后,我将r
和c
替换为Im2
以重新生成Im1
:
Im2(r,c) = 1;
问题是重新生成的图像看起来不同:
在Im1
??
以及如何仅基于非零像素的索引重新生成Im1
注意:当我使用以下代码时:
for j = 1:length(r)
Im2(r(j,1),c(j,1)) = 1;
end
Im2
正确重新生成!!!!
答案 0 :(得分:3)
您需要使用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
中的一个值。
答案 1 :(得分:2)
您在Matlab中遇到索引问题。
如果您访问的内容为Img(values,values2)
,则会将对的值组合为@LuisMendo,并在评论中正确解释
如果要选择特定的随机索引,最好的方法是使用线性索引:
indexes=sub2ind(size(Img),r,c);
Img(indexes)=1;