matlab高级教程,【高级教程】利用高级计算软件MATLAB抠图教程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
A=imread('lin13.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,数学计算软件MATLAB资料集锦分享
数学计算软件MATLAB资料集锦分享 (2014-08-20 17:07:08) 标签: matlab 数学建模 仿真模拟 整理了一些有关MATLAB资料如下: 1.H型可逆PWM变换器的控制方式解析 ...
- 数学计算软件(Matlab、Mathematica)网页版
有时候会用到Matlab及Mathematica的数值计算或者符号计算功能,但是去安装一下太麻烦,而且毕竟不是常用,所以有了这样的需求. 在网上搜了下,发现真没这样的网站,可能也涉及到版权的问题,所以 ...
- ps海报合成教程_如何利用PS制作海报?详细教程来了!
今天能学长给大家带来一套利用PS做[月满中秋]海报的教程.福利干货到,请大家接住! 话不多说,直接上教程[月满中秋-第一课] 月满中秋-海报制作教程https://www.zhihu.com/vide ...
- 宝塔搭建网站教程php,怎么利用宝塔面板搭建网站详细教程
利用宝塔面板搭建网站是当前主流形式,宝塔面板操作简单,可视化操作,是新手和老司机搭建网站的首选.今天我的主题网就给小白们分享下怎么利用宝塔搭建自己的网站.如果你还没有安装宝塔可以参考:宝塔面板安装小白 ...
- 利用辐射光谱计算温度 matlab,时间调制型FTIR光谱仪辐射度定标方法的研究
1引言近年来,由于时间调制型FTIR自身具有灵敏度高.光谱分辨率高和波数准确度高等优点,其在实际中的应用越来越多,无论是军用.工业应用还是民用,时间调制型FTIR都有着广阔的应用前景[1-5].辐射度 ...
- matlab利用经纬度计算距离,MATLAB函数可计算两个坐标(纬度和经度)之间的距离...
How can I calculate distance between two world map coordinates (latitude and longitude) using MATLAB ...
- matlab如果不想立即在,科学计算与MATLAB 1.5
单元测验已完成成绩:100.0分 1 [单选题] MATLAB一词来自()的缩写. 窗体顶端 A. MathematicaLaboratory B. MatrixLaboratory C. MathW ...
- 科学计算软件matlab无法使用,谁能研发Matlab?
先说文章观点:呼吁类似达摩院的科研企业联合投入研发Matlab. 一纸禁文: 哈尔滨工业大学(哈工大).哈尔滨工程大学.北航等中国高校的师生先后发现,自己在使用被称作"工科神器"的 ...
- 矩阵半高宽matlab,半导体激光器半高宽(FWHM)计算(包含matlab仿真程序)
半导体激光器半高宽(FWHM)计算 一.问题描述 Estimate the spot size (FWHM) in the lateral and transverse directions for ...
最新文章
- 2018/12/05 PAT刷题 L1-018 大笨钟 Java
- PAT_B_1086_Java(15分)
- golang fmt.Print(15 == 1_5)
- Doule类型转成十六进制查看
- 使用PS2EXE将PowerShell脚本编译为可执行程序
- Java中关于字符类型在Unicode表中表示
- SPSS的下载和使用经历
- 车牌识别计算机应用领域,车牌识别全方位应用 引领智能交通新趋势
- 深度linux deepin 内存,【转载】深度Deepin国产操作系统使用体验报告!
- 科技的终极目标是什么
- 程序员的黑砖窑,东南亚博彩骗局详解
- jmeter显示桌面快捷方式图标
- 一只喵的西行记-12 灯火阑珊处那娃在哭
- 用easyx图形库做一个简单的c++小游戏---迷宫游戏
- 流行20年的架构设计原则SOLID可能已经不适合微服务了
- svn下载安装与使用教程/方法
- 苹果5G芯片研发失败:继续依赖高通,还要担心被起诉?
- 欧阳修与梅尧臣:逢君伊水畔,一见已开颜
- 富士康本科计算机,富士康计算机 南开大学【深圳成考】
- 公钥私钥及ssh公钥无密码登录