次のソリューションが不完全であるが、それはあなたにリードを与えることができます:
私はマスクを作成するには、次の操作を使用:
- 各軸に×2倍に画像を縮小(ノイズを減らす)。
- シュレンク画像の絶対差を計算します。
- しきい値を使用してバイナリイメージに変換します(しきい値は
graythresh
を使用)。
- 二値画像を二分します。
- バイナリをフルサイズにサイズ変更します。
- バイナリマスクを乗算して前景画像からピクセルをマスクします。
次のコードをチェックしてください:
%Read two images from hosting site.
twoImages = imread('https://i.stack.imgur.com/5dN5O.png');
%Convet from uint8 to double (pixels range [0, 1])
twoImages = im2double(twoImages);
B = twoImages(7:332, 23:599, :);
I = twoImages(7:332, 706:1282, :);
%Shrink images by factor of x2 in each axis.
sB = imresize(B, 0.5);
sI = imresize(I, 0.5);
%Diference of shrank images.
sD = abs(sB - sI);
%Convert to binary image, using threshold.
level = graythresh(sD);
sBW = im2bw(sD, level);
%Dilate binary image
se = strel('disk', 6);
sBW = imdilate(sBW, se);
%Resize binary image to size of I (create binary mask).
BW = imresize(sBW, [size(I,1), size(I,2)]);
%Mask elements with BW = 0 (BW is used as mask).
I = I .* double(cat(3, BW, BW, BW));
figure;imshow(I);
結果:
背景にジーンズの色とブラックパネルとの違いは、あなたが黒でそれを見るため、非常に少ないですがストライプ(0に近い値を意味します)。 – Itay
Itayは指摘したように、濃い青色が黒色に相当するグレースケールに関して考える必要があります。たぶん、各カラーチャンネルR-G-Bで減算を実行し、その結果がどのように出力されるかを確認することができます。 – marcoresk