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中进行减法运算,看看结果如何。