有些人可以解释这个程序。最终结果是一种图像,其中海洋和天空已经分开,并且在检测船上减去了天空区域。有人可以帮助我理解这一点是哪种方法。

1查看(最近30天)
苏里亚曼纳尔
苏里亚曼纳尔 2020年5月11日
评论: 图像分析师 2020年5月11日
计划1:
功能[mi1] = s12(wi1,bd1)
[IH12 IW12 NC12] =尺寸(Wi1);
AC1 = WI1(::,1);
BC1 = Wi1(:,:,2);
CC1 = Wi1(:,:,3);
AR1 = DownSample(AC1(:),1000);
br1 =下拍(BC1(:),1000);
CR1 = DownSample(CC1(:),1000);
sd2 = [ac1(:)';BC1(:)';cc1(:)';];
sdr2 = [ar1(:)';br1(:)';CR1(:)'];
[w,m,v,l] = emgm12(sdr2',2);
Mem1 =零(长度(AC1(:)),2);
对于j = 1:长度(ac1(:))
MEM1(j,1)= w(1)* mvnpdf(sd2(:,j),m(:,1),v(:,1));
MEM1(j,2)= w(2)* mvnpdf(sd2(:,j),m(:,2),v(:,2));
结尾
IS_BG = MEM1(:,2)> MEM1(:,1);
BG1 = REPAPE(IS_BG,IH12,IW12);
如果BD1.
如果w(1)> w(2)
FG2 = BG1;
别的
FG2 =〜BG1;
结尾
别的
如果w(1)> w(2)
FG2 =〜BG1;
别的
FG2 = BG1;
结尾
结尾
mi1 = wi1;
MI1(:,:,1)= FG2。* MI1(:,:,1);
MI1(:,:,2)= FG2。* MI1(:,:,2);
MI1(:,:,3)= FG2。* MI1(:,3);
mi1 = mi1> 1;
程序2:
功能[w,m,v,l] = emgm12(x,k,ltol,max12,pf12,In12)
如果nargin <= 1,
disp('需要至少2个输入:x,k!/ n')
返回
elseif nargin == 2,
ltol = 0.1;MAX12 = 1000;pf12 = 0;In12 = [];
err_x = verify_x(x);
err_k = verify_k(k);
如果err_x |err_k,返回;结尾
elseif nargin == 3,
MAX12 = 1000;pf12 = 0;In12 = [];
err_x = verify_x(x);
err_k = verify_k(k);
[ltol,err_ltol] = verify_ltol(ltol);
如果err_x |err_k |err_ltol,返回;结尾
elseif nargin == 4,
pf12 = 0;In12 = [];
err_x = verify_x(x);
err_k = verify_k(k);
[ltol,err_ltol] = verify_ltol(ltol);
[max12,err_maxiter] = verify_maxiter(max12);
如果err_x |err_k |err_ltol |err_maxiter,返回;结尾
elseif nargin == 5,
In12 = [];
err_x = verify_x(x);
err_k = verify_k(k);
[ltol,err_ltol] = verify_ltol(ltol);
[max12,err_maxiter] = verify_maxiter(max12);
[pf12,err_pflag] = verify_pflag(pf12);
如果err_x |err_k |err_ltol |err_maxiter |err_pflag,返回;结尾
elseif nargin == 6,
err_x = verify_x(x);
err_k = verify_k(k);
[ltol,err_ltol] = verify_ltol(ltol);
[max12,err_maxiter] = verify_maxiter(max12);
[pf12,err_pflag] = verify_pflag(pf12);
[in12,err_init] = verify_init(In12);
如果err_x |err_k |err_ltol |err_maxiter |err_pflag |err_init,返回;结尾
别的
DISP('2到6个输入!');
返回
结尾
t =迟钝;
如果是伊斯克(In12),
[w,m,v] = Ini123(x,k);l = 0;
别的
w = 12.W;
m = 11月11日;
v = In12.v;
结尾
ln = lh12(x,k,w,m,v);
lo = 2 * ln;
niter = 0;
而(abs(100 *(ln-lo)/ lo)> ltol)&(niter <= max12),
e = exp12(x,k,w,m,v);
[w,m,v] = max23(x,k,e);
lo = ln;
ln = lh12(x,k,w,m,v);
niter = niter + 1;
结尾
l = ln;
如果pf12 == 1,
[n,d] =尺寸(x);
如果是D> 2,
DISP('只能绘制1或2维应用!/ n');
别的
plot_gm(x,k,w,m,v);
结尾
ELAPSED_TIME = SPRINTF('CPU时间使用:%5.2FS',CPTIME-T);
DISP(ELAPSED_TIME);
disp(Sprintf('迭代次数:%d',niter-1));
结尾
功能e = exp12(x,k,w,m,v)
[n,d] =尺寸(x);
a =(2 * pi)^(0.5 * d);
s =零(1,k);
IV =零(D,D,K);
对于j = 1:k,
if v(:,:,j)== zeros(d,d),v(:,:,j)= =α(d,d)* eps;结尾
s(j)= sqrt(det(v(:,:,j))));
IV(:,:,j)= inv(v(:,:,j));
结尾
e =零(n,k);
对于i = 1:n,
对于j = 1:k,
dxm = x(i,:)' - m(:,j);
PL = EXP(-0.5 * DXM'* IV(:,:,j)* dxm)/(a * s(j));
e(i,j)= w(j)* pl;
结尾
e(我,:) = e(i,:) / sum(e(我,:));
结尾
功能[w,m,v] = max23(x,k,e)
[n,d] =尺寸(x);
w =零(1,k);m =零(d,k);
v =零(d,d,k);
对于i = 1:k,
对于j = 1:n,
w(i)= w(i)+ e(j,i);
m(:,i)= m(:,i)+ e(j,i)* x(j,:)';
结尾
m(:,i)= m(:,i)/ w(i);
结尾
对于i = 1:k,
对于j = 1:n,
dxm = x(j,:)' - m(:,i);
v(:,:,i)= v(:,:,i)+ e(j,i)* dxm * dxm';
结尾
v(:,:,i)= v(:,:,i)/ w(i);
结尾
w = w / n;
函数l = lh12(x,k,w,m,v)
[n,d] =尺寸(x);
u =均值(x)';
s = cov(x);
l = 0;
对于i = 1:k,
IV = inv(v(:,:,i));
l = l + w(i)*( - 0.5 * n * log(det(2 * pi * v(:,i)))...
-0.5 *(n-1)*(迹线(iv * s)+(U-M(:,i))'* IV *(U-M(:,i))))));
结尾
函数err_x = verify_x(x)
err_x = 1;
[n,d] =尺寸(x);
如果n
DISP('输入数据必须为n x d!/ n');
返回
结尾
err_x = 0;
函数err_k = verify_k(k)
err_k = 1;
如果〜isnumeric(k)|〜Isreal(k)|k <1,
disp('k必须是真实整数> = 1!/ n');
返回
结尾
err_k = 0;
函数[ltol,err_ltol] = verify_ltol(ltol)
err_ltol = 1;
如果是isempty(ltol),
ltol = 0.1;
elsefif〜isreal(ltol)|ltol <= 0,
DISP('LTOL必须是正面的实数!');
返回
结尾
err_ltol = 0;
函数[maxiter,err_maxiter] = verify_maxiter(maxiter)
err_maxiter = 1;
如果是isempty(maxiter),
maxiter = 1000;
elsefif〜isreal(maxiter)|maxiter <= 0,
DISP('LTOL必须是正面的实数!');
返回
结尾
err_maxiter = 0;
函数[pflag,err_pflag] = verify_pflag(pflag)
err_pflag = 1;
如果是isempty(pflag),
pflag = 0;
elsefif pflag〜= 0&pflag〜= 1,
DISP('绘图标志必须是0或1!/ n');
返回
结尾
err_pflag = 0;
函数[init,err_init] = verify_init(init)
err_init = 1;
如果是isempty(init),
elseif isstruct(init),
[wd,wk] = size(init.w);
[MD,MK] =大小(init.m);
[VD1,VD2,VK] =大小(init.v);
如果WK〜= MK |WK〜= VK |mk〜= vk,
DISP(在init.w(1,k)中,init.m(d,k)和init.v(d,d,k)必须等于!/ n')
返回
结尾
如果md〜= vd1 |MD〜= VD2 |VD1〜= VD2,
DISP(在init.w(1,k),init.m(d,k)和init.v(d,d,k)必须等于!/ n')
返回
结尾
别的
DISP('init必须是结构:w(1,k),m(d,k),v(d,d,k)或[]!');
返回
结尾
err_init = 0;
功能[w,m,v] = Ini123(x,k)
[n,d] =尺寸(x);
[ci,c] = kmeans(x,k,'start','cluster',...
'maxiter',100,...
'空洞','drop',...
'显示','关闭');
虽然SUM(ISNAN(C))> 0,
[ci,c] = kmeans(x,k,'start','cluster',...
'maxiter',100,...
'空洞','drop',...
'显示','关闭');
结尾
m = c';
vp = repmat(struct('count',0,'x',零(n,d)),1,k);
对于i = 1:n,
VP(CI(I))。Count = VP(CI(i))。计数+ 1;
vp(ci(i))。x(vp(ci(i))。计数,:) = x(i,:);
结尾
v =零(d,d,k);
对于i = 1:k,
w(i)= vp(i).count / n;
v(:,:i)= cov(vp(i).x(1:vp(i).count,:));
结尾
程序3:
功能[p,u,v] = em(r1,k)
[n,dim] =尺寸(R1);
u = r1(randint(k,1,[1,n]),:);
v =零(k,1);
对于II = 1:k
RAW_TMP = R1(II:K:结束,1);
v(ii,:) = std(raw_tmp);
结尾
w = =(k,1)/ k;
p =零(n,k);
U0 = U * 0;
v0 = 0 * v;
w0 = w * 0;
e12 = sum(sum((u-u0)。^ 2))+ sum(sum((v-v0)。^ 2))+(和((w-w0)。^ 2));
I12 = 1;
X_U =零(尺寸(R1));
虽然E12> 10 ^( - 6)
对于JJ = 1:k
对于ss = 1:暗淡
X_U(:,ss)= r1(:,ss)-u(jj,ss)* a(n,1);
结尾
x_u = x_u。* x_u;
p(:,jj)= POWER(SQRT(2 * PI)* V(JJ), - 1 * DIM)* exp(( - 1/2)*和(X_U,2)./(v(JJ)。^ 2));
p(:,jj)= p(:,jj)* w(JJ);
结尾
psum = sum(p,2);
对于JJ = 1:k
p(:,jj)= p(:,jj)./ psum;
结尾
psum2 = sum(p,1);
pnorm = p * 0;
对于JJ = 1:k
pnorm(:,jj)= p(:,jj)/ psum2(JJ);
结尾
u0 = u; v0 = v; w0 = w;
u =(pnorm。')* r1;
对于JJ = 1:k
对于ss = 1:暗淡
X_U(:,ss)= r1(:,ss)-u(jj,ss)* a(n,1);
结尾
x_u = x_u。* x_u;
X_USUM = SUM(X_U,2);
v(jj)= sqrt(1 / dim *(pnorm(:,jj)。')* x_usum);
结尾
w =(总和(p)/ n)。';
I12 = I12 + 1;
e12 = sum(sum((u-u0)。^ 2))+ sum(sum((v-v0)。^ 2))+(和((w-w0)。^ 2));
结尾
1条评论
图像分析师
图像分析师 2020年5月11日
你可以问这个不太好的程序员可以添加缺少的评论来解释它。我的意思是,什么样的体重编程器没有提出评论来解释它在做什么? 这段代码是 不可接受 如果他们为我工作了。

登录评论。

答案(0)

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!