我有几个连接组件的二进制图像,有些大,有些小(可能只有 1 个像素)。有了这个,我正在寻找一种方法,以一种有效的方式将每个连接的组件变成一个跳棋模式,而不是连接的 blob。
到目前为止,我已经想出了两种可以尝试的方法,但它们要么会产生错误,要么效率很低:
我知道整个图像,可以制作一个棋盘格图案蒙版来去除 50% 的像素。这是非常快的,但平均会删除 50% 的连接组件,这些组件的面积只有一个像素。
在 MATLAB/Octave 中使用
bwlabel()
,并循环遍历每个连接的组件,仅当掩码超过 1 个像素时才将掩码应用于该组件(同时在循环到达时考虑其他组件)。这可能非常低效。
任何可以使用的智能/内置解决方案?
生成图形的代码
T = zeros(40,40);
T(10:30,10:30) = 1;
chessVec = repmat([1;0],20,1);
T_wanted = (repmat([chessVec circshift(chessVec,1)],1,20).*T);
figure();
subplot(1,2,1);imshow(T);title('Start shape')
subplot(1,2,2);imshow(T_wanted);title('Wanted shape');