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));

原文:http://www.cnblogs.com/natalie/p/5631548.html

matlab抠图数据,MATLAB抠图相关推荐

  1. matlab 自动处理数据,Matlab Remote IPC自动化数据处理

    Matlab Remote IPC 实现数据自动化处理 转载请注明作者梦里茶 需求 在研究中遇到这样一种需求, 在Matlab端做GPU运算: 在Python端做数据清洗和数据分析: 两端分属两个服务 ...

  2. matlab 改变数据,MATLAb怎么实现对表格数据的修改

    MATLAb怎么实现对表格数据的修改 关注:176  答案:2  mip版 解决时间 2021-01-11 09:07 提问者阳光在浪尖跳动 2021-01-10 09:50 MATLAb怎么实现对表 ...

  3. matlab光谱数据,matlab生成光谱仿真数据

    生成光谱仿真数据 % 模拟单狭缝到双狭缝到四狭缝 % % % ... ... ... % ... .. ... ... ... % .......... ... .. ... ... % ... .. ...

  4. matlab合并数据,matlab使用小技巧——数据的拆分与合并

    一.建立子文件夹-mkdir的使用 需求:在文件夹'截取后数据'中建立子文件夹s01-s32. 代码: for k=1:32 if k<10 pathname=sprintf('s0%d\\', ...

  5. matlab标量数据,matlab获取标量

    1.mxIsDouble 功能:判断阵列是否是双精度类型 语法: #include"mex.h" bool mxIsDoule(const mxArray *array_ptr)  ...

  6. 在Python中读取MATLAB的数据文件

    简 介: 本文测试了几种通过python直接读取MATLAB的**.MAT格式的数据文件,有些方法经过测试发现无法完成.而通过mat4py可以比较方便的读取MATLAB中的数据文件.利用手边已有的用于 ...

  7. 【 MATLAB 】使用 MATLAB 得到高密度谱(补零得到DFT)和高分辨率谱(获得更多的数据得到DFT)的方式对比(附MATLAB脚本)

    上篇博文分析了同一有限长序列在不同的N下的DFT之间的不同: MATLAB ]使用 MATLAB 作图讨论有限长序列的 N 点 DFT(强烈推荐)(含MATLAB脚本) 那篇博文中,我们通过补零的方式 ...

  8. python变量存为matlab,详解如何在python中读写和存储matlab的数据文件(*.mat)

    背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...

  9. matlab保存数据

    matlab保存数据 标签: matlab工作正则表达式浏览器扩展file 2012-06-11 11:28 26196人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: matlab(3) 作 ...

最新文章

  1. Python基本数据类型之元组
  2. 每日一皮:为这位姑娘的回答鼓掌!
  3. python处理excel字典-使用Python代码处理Excel
  4. BZOJ-2716-天使玩偶angel-CDQ分治
  5. Eclipse 默认设置的换行长度
  6. 【Pytorch 】nn.functional.unfold()==>卷积操作中的提取kernel filter对应的滑动窗口
  7. Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)
  8. 电脑屏幕卡住了按什么都没反应_刚买2个月,联想电脑屏幕出现坏点,售后回复:坏点不够3个不能保修...
  9. log4j日志配置方法
  10. 产品属性对风险定价有什么影响?
  11. itunes备份包括哪些内容_建筑工程的招标包括哪些内容?
  12. 怎么通过controller层退出登录_控制层访问拦截
  13. 64位Python读取周立功USBCAN-I信息
  14. .NET Remoting 配置文件方式
  15. 使用 OpenSSL 生成 HTTPS 证书
  16. java类加载器说法正确的_Java中的类加载器
  17. 生成树协议(一)STP协议原理简介:广播风暴、MAC地址表震荡实验、STP工作原理、BPDU简介、STP故障处理
  18. 2019icpc南京网络赛 Holy Grail(SPFA)
  19. KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机
  20. 一行代码搞定Android弧形卫星动画菜单(附Demo)

热门文章

  1. 微信商家转账到零钱 V3(JAVA)转账与查询
  2. CCF计算机软件能力认证201809-1卖菜(C语言版)
  3. 一周信创舆情观察(2.14~2.20)
  4. 一个P9告诉你为什么某电商怕了拼多多
  5. 小Q书桌支持WIN10完美运行 关于win10不兼容小q书桌
  6. Qt学习:无边框界面的实现总结
  7. Cura参数设置-避免支撑拆除带来的困难
  8. java计算机毕业设计html5健身房信息管理系统源码+数据库+系统+lw文档
  9. Verilog——秒计数器
  10. Java、JSP教师信息管理系统