GrabCut提取图像前景色MATLAB代码实现(含解释说明)

GrabCut提取前景色MATLAB代码(含解释说明)

GrabCut简介

GrabCut是Graph Cut的改进版,是迭代的Graph Cut。OpenCV中的GrabCut算法是依据《“GrabCut” - Interactive Foreground Extraction using Iterated Graph Cuts》这篇文章来实现的。该算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作即可得到比较好的分割结果。
与Graph cut指定两个顶点不同,grabcut只需指定一个粗略的能将目标框住的边框就可以完成良好的分割。(好比PS中的魔棒工具,效果和PS抠图一样。)
GrapCut分割效果图
简介来源:简书(https://www.jianshu.com/p/1618b281b707)

小编也是刚刚学习,理论的东西我也在这里扯不清楚,直接上代码,看码说话!

MATLAB实现效果图

这是ROI区域的选取,可以指定点提取或者手动选取,具体操作见代码,两种方式都给出来了。
这是ROI区域的选取,可以指定点提取或者手动选取,具体操作见代码,两种方式都给出来了。
Grabcut处理的整个流程图,右下角为分割出来的前景区域
Grabcut处理的整个流程图,右下角为分割出来的前景区域

MATLAB代码实现

Grabcut的MATLAB代码如下,如果这段代码都看不懂,说明MATLAB图像处理基础课没入门,需要加油哈!

%% GrabCut 函数应用
% 从图像中抠出前景色

clear;clc;
%读入RGB图像
RGB = imread('peppers.png');%可以自行更改图片
%超像素分割——创建一个同样大小的图像
L = superpixels(RGB,500);

%% 创建可变多边形
imshow(RGB)
%①手动创建,gca为函数句柄
% 在弹出figure窗口直接鼠标点击选取闭环区域。
%h1 = impoly(gca); %impoly() = drawpolygon() = drawpolyline()

%②定点创建,gca为函数句柄
h1 = impoly(gca,[72,105; 1,231; 0,366; 104,359;...
        394,307; 518,343; 510,39; 149,72]);

%% 获取ROI位置坐标
ROIPoints = getPosition(h1);

%% 将感兴趣区域(ROI)多边形转换为区域蒙版
% poly2mask(x,y,m,n)从在x和y处具有顶点的ROI多边形计算大小为m×n的二进制感兴趣区域(ROI)掩模BWROI = poly2mask(ROIPoints(:,1),ROIPoints(:,2),size(L,1),size(L,2));

%% 开始分割
BW = grabcut(RGB,L,ROI);
figure
subplot(223);
imshow(BW);
title('分割模板');

maskedImage = RGB;
%将maskedImage图像背景全部改为0,即黑色
maskedImage(repmat(~BW,[1 1 3])) = 0;
subplot(224);
imshow(maskedImage)
title('分割效果');

subplot(221);
imshow(RGB);
title('原始图像');

subplot(222);
imshow(L);
title('L模板');
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小洋葱.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值