在matlab中重新生成二进制图像

时间:2015-08-05 12:53:28

标签: image matlab matrix

我有二进制图片Im1

enter image description here

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

首先我创建了另一张图片Im2

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

然后我使用 find

提取了白色像素的索引
[r , c] = find(Im1 == 1);

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

Im2(r,c) = 1;

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

enter image description here

Im1 ??

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

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

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

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

Im2正确重新生成!!!!

2 个答案:

答案 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;