matlab 蓝屏抠图,MATLAB抠图
http://blog.sina.com.cn/s/blog_5dd2e9270100xdcp.html
代码不能运行,不知道咋回事
poison matting matlab code
注:显示图像后,单击鼠标左键连出完全背景区域,双击左键结束;
图像改变后,再单击鼠标左键连出完全前景区域,双击左键结束。即可得到结果。
A=imread('ppmm2.bmp');
imshow(A);
hold on;
Threshold = 1;
UniBack=[0
0
255];
% choose background object, and B results into the Foreground Object and the
% Boundary Region
% choose the outer line of the boundary region. Single left click the mouse to specify vertice.Double left click or single right click to finish;
OuterBW = roipoly(A);
B(:,:,1) = immultiply(A(:,:,1),OuterBW);
B(:,:,2) = immultiply(A(:,:,2),OuterBW);
B(:,:,3) = immultiply(A(:,:,3),OuterBW);
Back(:,:,1) = immultiply(A(:,:,1),~OuterBW);
Back(:,:,2) = immultiply(A(:,:,2),~OuterBW);
Back(:,:,3) = immultiply(A(:,:,3),~OuterBW);
imshow(B);
% choose foreground object, and C results into a Circle of Interest
% choose the inner line of the boundary region. Single left click the mouse to specify vertice.Double left click or single right click to finish;
InnerBW = roipoly(B);
C(:,:,1) = immultiply(B(:,:,1),~InnerBW);
C(:,:,2) = immultiply(B(:,:,2),~InnerBW);
C(:,:,3) = immultiply(B(:,:,3),~InnerBW);
Fore(:,:,1) = immultiply(A(:,:,1),InnerBW);
Fore(:,:,2) = immultiply(A(:,:,2),InnerBW);
Fore(:,:,3) = immultiply(A(:,:,3),InnerBW);
imshow(C);
hold off;
RawAlpha = (double(OuterBW)+double(InnerBW))/2;
I = double(A);
% Method of "averaging" to get raw fore and background colors
for i = 1:size(RawAlpha,1)
for j = 1:size(RawAlpha,2)
RawFore(i,j,1)=0;
RawFore(i,j,2)=0;
RawFore(i,j,3)=0;
RawBack(i,j,1)=0;
RawBack(i,j,2)=0;
RawBack(i,j,3)=0;
if RawAlpha(i,j) == 1
RawFore(i,j,:)=Fore(i,j,:);
end;
if RawAlpha(i,j) == 0
RawBack(i,j,:)=Back(i,j,:);
end;
if RawAlpha(i,j) == 0.5
r=1;
while 1
TestFore = InnerBW(max(i-r,1):min(i+r,size(A,1)),max(j-r,1):min(j+r,size(A,2)));
if size(find(TestFore),1)
[i1, j1] = find(TestFore);
i2 = i1 + max(i-r,1) -1;
j2 = j1 + max(j-r,1) -1;
Rs = double(Fore(i2,j2,:));
Ds(:,1)=diag(Rs(:,:,1));
Ds(:,2)=diag(Rs(:,:,2));
Ds(:,3)=diag(Rs(:,:,3));
if size(Ds,1) == 1
RawFore(i,j,:) =Ds;
else
RawFore(i,j,:) = sum(Ds) / size(Ds,1);
end;
clear Ds;
break;
else
r=r+1;
end;
end;
r=1;
while 1
TestBack = ~OuterBW(max(i-r,1):min(i+r,size(A,1)),max(j-r,1):min(j+r,size(A,2)));
if size(find(TestBack),1)
[i1, j1] = find(TestBack);
i2 = i1 + max(i-r,1) -1;
j2 = j1 + max(j-r,1) -1;
Rs = double(Back(i2,j2,:));
Ds(:,1)=diag(Rs(:,:,1));
Ds(:,2)=diag(Rs(:,:,2));
Ds(:,3)=diag(Rs(:,:,3));
if size(Ds,1) == 1
RawBack(i,j,:) =Ds;
else
RawBack(i,j,:) = sum(Ds) / size(Ds,1);
end;
clear Ds;
break;
else
r=r+1;
end;
end;
end;
end;
end;
%此处没有用高斯滤波
Denorm = RawFore - RawBack;
%red channel
I1 = I(:,:,1);
Denorm1 = Denorm(:,:,1);
for i=1:size(Denorm1,1)
for j= 1: size(Denorm1,2)
if Denorm1(i,j)==0
Denorm1(i,j)=1;
end;
end;
end;
OldAlpha = RawAlpha;
NewAlpha = RawAlpha;
h1=0;
while 1
for i=1:size(OldAlpha,1)
for j=1:size(OldAlpha,2)
NewAlpha(i,j) = OldAlpha(i,j);
if RawAlpha(i,j) == 0.5
Roui = ((I1(i+1,j) + I1(i-1,j) - 2 * I1(i,j)) * Denorm1(i,j) - (I1(i+1,j) - I1(i,j)) * (Denorm1(i+1,j) - Denorm1(i,j)))/(Denorm1(i,j) * Denorm1(i,j));
Rouj = ((I1(i,j+1) + I1(i,j-1) - 2 * I1(i,j)) * Denorm1(i,j) - (I1(i,j+1) - I1(i,j)) * (Denorm1(i,j+1) - Denorm1(i,j)))/(Denorm1(i,j) * Denorm1(i,j));
Rou = Roui + Rouj;
NewAlpha(i,j) = (OldAlpha(i+1,j) + NewAlpha(i-1,j) + OldAlpha(i,j+1) + NewAlpha(i,j-1) - Rou) / 4;
if NewAlpha(i,j)<0
NewAlpha(i,j)=0;
end;
if NewAlpha(i,j)>1
NewAlpha(i,j)=1;
end;
end;
end;
end;
% imshow(uint8(NewAlpha*255));
DifferenceAlpha = abs(NewAlpha - OldAlpha);
OldAlpha = NewAlpha;
if sum(sum(DifferenceAlpha)) < Threshold
break;
end;
h1=h1+1;
end;
for i=1:size(A,1)
for j=1:size(A,2)
if OldAlpha(i,j)==0
NewImage(i,j,:)=UniBack';
else
NewImage(i,j,1)=UniBack(1)*(1-OldAlpha(i,j))+RawFore(i,j,1)*OldAlpha(i,j);
NewImage(i,j,2)=UniBack(2)*(1-OldAlpha(i,j))+RawFore(i,j,2)*OldAlpha(i,j);
NewImage(i,j,3)=UniBack(3)*(1-OldAlpha(i,j))+RawFore(i,j,3)*OldAlpha(i,j);
end;
end;
end;
figure,imshow(NewAlpha);
figure,imshow(uint8(NewImage));
figure,imshow(uint8(RawFore));
figure,imshow(uint8(RawBack));
matlab 蓝屏抠图,MATLAB抠图相关推荐
- MATLAB批量为png透明(抠图)图片替换添加背景
MATLAB批量为png透明(抠图)图片替换添加背景 说明 最近有个小需求, 需要抠图后将抠图的背景替换为指定图片, 如果一张一张做, 图片多了实在是不好用. 前提 准备好背景图片, 一张 准备好目标 ...
- opencv2_蓝屏抠图(图像相减并去噪)
问题描述: Ø 蓝屏抠图 建立一个纯色背景(如蓝色或绿色),先拍摄一幅空背景图像,再在背景前拍摄一幅自己的图像,尝试将两幅图像的对应像素相减并去噪,实现人像的抠图处理. C++代码: #include ...
- Ubuntu高分屏下Matlab工具栏字体过小
Ubuntu高分屏下Matlab工具栏字体过小 安装好matlab初始的工具栏在高分屏下字体特别小,如下 在matlab中使用如下命令 #在命令行内输入如下命令,其中2.0是放大的尺度,根据需要自行设 ...
- matlab 高分屏 变小,解决Ubuntu高分屏下matlab标题栏(菜单栏)字体过小问题
本人笔记本为1920x1080,在win10下还好,可以调整,但是到了ubuntu下设置GNOME的scaling factor不管用,于是参考一波Matlab论坛,找到了答案.请注意Matlab版本 ...
- 黑屏?白屏?蓝屏?整理戴尔G3在使用过程中遇到的,一些强制关机重启就能解决的问题
强制关机可谓是笔记本使用者经常用的一种手段了,以至于坊间流传一句话: "遇事不决,10秒强制关机" 博主使用G3 3590近3年了,做个笔记来记录遇到的一些,使用强制关机,再开机就 ...
- msconfig蓝屏_关于MSConfig中修改引导造成开机蓝屏
关于 MSConfig 中修改引导造成开机蓝屏 前几天看到一篇关于提升 Win7 系统性能的文章,里面介绍到修 改 msconfig 中的引导,比如在"高级选项"里勾选处理器数和最 ...
- 用matlab做音乐仿真,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真
Matlab课程设计报告--MATLAB GUI的音乐键盘仿真 1 MATLAB MATLAB 实践实践 课程设计课程设计 目目 录录 1.1.设计目的设计目的3 3 2.2.题目分析题目分析3 3 ...
- matlab 概述作业答案,Matlab作业答案
<Matlab作业答案>由会员分享,可在线阅读,更多相关<Matlab作业答案(26页珍藏版)>请在金锄头文库上搜索. 1.控制系统的 MATLAB 仿真与设计 - 实验作业1 ...
- 用matlab拟合多元函,matlab 多元函数拟合 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
月只蓝 一.MATLAB代码和结果如下,图形结果见附图1.CODE: function feixianxingnihe_3 clear all;clc format long data=[298,1. ...
- matlab音乐键盘模拟,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真
Matlab课程设计报告--MATLAB GUI的音乐键盘仿真 < MATLAB 实践 > 课程设计 目 录 1.设计目的-------------------3 2.题目分析------ ...
最新文章
- 物理理论发展放缓?这是一种认知误判
- linux shell顺序执行,shell 执行顺序
- java 四种实现延迟加载的方法
- yii2实战教程之第一个Yii程序
- 使用javasript 遍历页面CheckBox
- Android N 多窗口模式,你需要知道的一切
- MyEclipse 2015 CI
- hive:默认允许动态分区个数为100,超出抛出异常:
- linux下刻录光盘读取不了_Linux下刻录光盘实战
- C++面试中string类的一种正确简明的写法
- python 随机请求头_为了爬虫换个头,我用python实现三种随机请求头方式!
- 读《JavaScript语言精粹(修订版)》心得
- 【Unity3D 灵巧小知识点】☀️ | Unity脚本生命周期
- PDMS软光刻加工过程
- 虚拟机安装ubuntu server及工作环境搭建
- 制作一个微商城要多少钱
- PPT超实用的23个快捷键
- 证券业数据大集中及其风险控制分析
- 公共基础知识:中国地形地貌
- 揭露强奸犯的黑客被判有罪?审视CFAA计算机欺诈法