いくつかの接続されたコンポーネントのバイナリイメージがあります。いくつかは大きいものといくつかは小さいものです(おそらく1ピクセルのみ)。これにより、接続された各コンポーネントを、接続されたBLOBではなくチェッカーパターンにする方法を効率的に模索しています。
これまでのところ、これを試すことができる2つの方法を考え出しましたが、エラーが発生するか、非常に非効率になる可能性があります。
画像全体を知っているので、チェッカーパターンマスクを作成してピクセルの50%を削除できます。これは非常に高速ですが、平均して、領域が1ピクセルしかない連結成分の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');