1

に減算した後まま左の写真は、私の背景画像で、右のは、元の画像です:背景がMATLAB

enter image description here

減算を行った後、除去する際に問題が発生したイム足首の背景:

enter image description here

目的のみフォアグラウンドを得ることですが、誰もがアイデアを持っていますか?下の図は、バックグラウンドの減算と表示の方法を示すコードです。ありがとう。

I = (imread('frame9.jpg')); 
figure(1),imshow(I); 
bg =(imread('background.jpg')); 
figure(2),imshow(bg); 
Ip = bg-I; 
figure(3),imshow(Ip); 
+0

背景にジーンズの色とブラックパネルとの違いは、あなたが黒でそれを見るため、非常に少ないですがストライプ(0に近い値を意味します)。 – Itay

+0

Itayは指摘したように、濃い青色が黒色に相当するグレースケールに関して考える必要があります。たぶん、各カラーチャンネルR-G-Bで減算を実行し、その結果がどのように出力されるかを確認することができます。 – marcoresk

答えて

0

次のソリューションが不完全であるが、それはあなたにリードを与えることができます:

私はマスクを作成するには、次の操作を使用:

  • 各軸に×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); 

結果:
enter image description here