Current location - Education and Training Encyclopedia - Graduation thesis - How to do soft matting or something? What is the algorithm?
How to do soft matting or something? What is the algorithm?
Function [A]=getLaplacian 1(I, consts, epsilon, win_size)

if (~exist('epsilon ',' var '))

ε= 0.000000 1;

end

if(is empty(ε))

ε= 0.000000 1;

end

if (~exist('win_size ',' var '))

win _ size = 1;

end

if (isempty(win_size))

win _ size = 1;

end

neb_size=(win_size*2+ 1)^2;

[h, w, c]= size (i);

n = h; m = w;

img _ size = w * h;

consts=imerode(consts,ones(win _ size * 2+ 1));

indsM = shape([ 1:img _ size],h,w);

tlen=sum(sum( 1-consts(win_size+ 1:end-win_size,win_size+ 1:end-win_size)))*(neb_size^2);

row_inds=zeros(tlen, 1);

col_inds=zeros(tlen, 1);

vals=zeros(tlen, 1);

len = 0;

For j= 1+win_size:w-win_size.

for I = win _ size+ 1:h-win _ size

if (consts(i,j))

continue

end

win _ inds = indsM(I-win _ size:I+win _ size,j-win _ size:j+win _ size);

win _ inds = win _ inds(:);

winI=I(i-win_size:i+win_size,j-win_size:j+win_size,);

winI = shape(winI,neb_size,c);

win_mu=mean(winI, 1)';

win _ var = inv(winI ' * winI/Neb _ size-win _ mu * win _ mu '+epsilon/Neb _ size * eye(c));

winI=winI-repmat(win_mu ',neb_size, 1);

tvals =( 1+winI * win _ var * winI ')/Neb _ size;

row_inds( 1+len:neb_size^2+len)=reshape(repmat(win_inds, 1,neb_size), ...

neb_size^2, 1);

col_inds( 1+len:neb_size^2+len)=reshape(repmat(win_inds',neb_size, 1), ...

neb_size^2, 1);

vals( 1+len:neb_size^2+len)=tvals(:);

len=len+neb_size^2;

end

end

vals = vals( 1:len);

row _ inds = row _ inds( 1:len);

col _ inds = col _ inds( 1:len);

A=sparse(row_inds,col_inds,vals,img_size,img _ size);

sumA=sum(A,2);

A=spdiags(sumA(:),0,img_size,img _ size)-A;