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抠图相关推荐

  1. MATLAB批量为png透明(抠图)图片替换添加背景

    MATLAB批量为png透明(抠图)图片替换添加背景 说明 最近有个小需求, 需要抠图后将抠图的背景替换为指定图片, 如果一张一张做, 图片多了实在是不好用. 前提 准备好背景图片, 一张 准备好目标 ...

  2. opencv2_蓝屏抠图(图像相减并去噪)

    问题描述: Ø 蓝屏抠图 建立一个纯色背景(如蓝色或绿色),先拍摄一幅空背景图像,再在背景前拍摄一幅自己的图像,尝试将两幅图像的对应像素相减并去噪,实现人像的抠图处理. C++代码: #include ...

  3. Ubuntu高分屏下Matlab工具栏字体过小

    Ubuntu高分屏下Matlab工具栏字体过小 安装好matlab初始的工具栏在高分屏下字体特别小,如下 在matlab中使用如下命令 #在命令行内输入如下命令,其中2.0是放大的尺度,根据需要自行设 ...

  4. matlab 高分屏 变小,解决Ubuntu高分屏下matlab标题栏(菜单栏)字体过小问题

    本人笔记本为1920x1080,在win10下还好,可以调整,但是到了ubuntu下设置GNOME的scaling factor不管用,于是参考一波Matlab论坛,找到了答案.请注意Matlab版本 ...

  5. 黑屏?白屏?蓝屏?整理戴尔G3在使用过程中遇到的,一些强制关机重启就能解决的问题

    强制关机可谓是笔记本使用者经常用的一种手段了,以至于坊间流传一句话: "遇事不决,10秒强制关机" 博主使用G3 3590近3年了,做个笔记来记录遇到的一些,使用强制关机,再开机就 ...

  6. msconfig蓝屏_关于MSConfig中修改引导造成开机蓝屏

    关于 MSConfig 中修改引导造成开机蓝屏 前几天看到一篇关于提升 Win7 系统性能的文章,里面介绍到修 改 msconfig 中的引导,比如在"高级选项"里勾选处理器数和最 ...

  7. 用matlab做音乐仿真,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真

    Matlab课程设计报告--MATLAB GUI的音乐键盘仿真 1 MATLAB MATLAB 实践实践 课程设计课程设计 目目 录录 1.1.设计目的设计目的3 3 2.2.题目分析题目分析3 3 ...

  8. matlab 概述作业答案,Matlab作业答案

    <Matlab作业答案>由会员分享,可在线阅读,更多相关<Matlab作业答案(26页珍藏版)>请在金锄头文库上搜索. 1.控制系统的 MATLAB 仿真与设计 - 实验作业1 ...

  9. 用matlab拟合多元函,matlab 多元函数拟合 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

    月只蓝 一.MATLAB代码和结果如下,图形结果见附图1.CODE: function feixianxingnihe_3 clear all;clc format long data=[298,1. ...

  10. matlab音乐键盘模拟,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真

    Matlab课程设计报告--MATLAB GUI的音乐键盘仿真 < MATLAB 实践 > 课程设计 目 录 1.设计目的-------------------3 2.题目分析------ ...

最新文章

  1. 物理理论发展放缓?这是一种认知误判
  2. linux shell顺序执行,shell 执行顺序
  3. java 四种实现延迟加载的方法
  4. yii2实战教程之第一个Yii程序
  5. 使用javasript 遍历页面CheckBox
  6. Android N 多窗口模式,你需要知道的一切
  7. MyEclipse 2015 CI
  8. hive:默认允许动态分区个数为100,超出抛出异常:
  9. linux下刻录光盘读取不了_Linux下刻录光盘实战
  10. C++面试中string类的一种正确简明的写法
  11. python 随机请求头_为了爬虫换个头,我用python实现三种随机请求头方式!
  12. 读《JavaScript语言精粹(修订版)》心得
  13. 【Unity3D 灵巧小知识点】☀️ | Unity脚本生命周期
  14. PDMS软光刻加工过程
  15. 虚拟机安装ubuntu server及工作环境搭建
  16. 制作一个微商城要多少钱
  17. PPT超实用的23个快捷键
  18. 证券业数据大集中及其风险控制分析
  19. 公共基础知识:中国地形地貌
  20. 揭露强奸犯的黑客被判有罪?审视CFAA计算机欺诈法

热门文章

  1. 【Matlab 六自由度机器人】运动学逆解(附MATLAB机器人逆解代码)
  2. 两个表格内容怎么合并
  3. STM32 学习十 Flash下载与调试
  4. 记录 FPGA加速器设计CNN(论文笔记)
  5. 现代信号处理——时频分析与时频分布(短时Fourier变换)
  6. PhantomJS not found on PATH
  7. 数据库系统概论笔记三——销售管理子系统E-R图的设计
  8. (专升本)信息安全(计算机病毒)
  9. cad导入图片之间相互转换
  10. 深度解读|盘扣销售价格上涨背后的原因是什么?