Image MATLAB中减法后的腿部背景

Image MATLAB中减法后的腿部背景,image,matlab,image-processing,computer-vision,computer-science,Image,Matlab,Image Processing,Computer Vision,Computer Science,左边的图片是我的背景图片,右边的图片是原始图片: 在做减法之后,我很难去除脚踝上的背景: 目的只是为了得到前景,有人有想法吗?下面显示的是我如何执行背景减法和显示背景减法的代码。谢谢 I = (imread('frame9.jpg')); figure(1),imshow(I); bg =(imread('background.jpg')); figure(2),imshow(bg); Ip = bg-I; figure(3),imshow(Ip); 以下解决方案不完整,但可以

左边的图片是我的背景图片,右边的图片是原始图片:

在做减法之后,我很难去除脚踝上的背景:

目的只是为了得到前景,有人有想法吗?下面显示的是我如何执行背景减法和显示背景减法的代码。谢谢

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

以下解决方案不完整,但可以为您提供线索:

我使用以下操作创建了一个掩码:

  • 在每个轴上按x2的倍数缩小图像(减少一些噪声)
  • 计算收缩图像的绝对差值
  • 使用阈值转换为二进制图像(使用
    灰度阈值找到阈值)
    
  • 放大二值图像
  • 将二进制文件重新调整为完整大小
  • 通过将前景图像与二值遮罩相乘,遮罩前景图像中的像素
检查以下代码:

%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);
结果:

以下解决方案不完整,但可以为您提供线索:

我使用以下操作创建了一个掩码:

  • 在每个轴上按x2的倍数缩小图像(减少一些噪声)
  • 计算收缩图像的绝对差值
  • 使用阈值转换为二进制图像(使用
    灰度阈值找到阈值)
    
  • 放大二值图像
  • 将二进制文件重新调整为完整大小
  • 通过将前景图像与二值遮罩相乘,遮罩前景图像中的像素
检查以下代码:

%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所指出的,您必须从灰度角度考虑,其中深蓝色相当于黑色。也许你可以在每个颜色通道R-G-B中进行减法运算,看看结果如何。牛仔裤颜色和背景中的黑色面板之间的差异非常小,因此你将其视为黑色条纹(这意味着值接近0)。正如Itay指出的,你必须从灰度角度考虑,深蓝色相当于黑色。也许你可以在每个颜色通道R-G-B中进行减法运算,看看结果如何。