• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: Matlab
  • 标签: graphcut  

资源简介

graphcut用于图像分割的matlab代码

资源截图

代码片段和文件信息

function [Ncut] = graphcuts(IpadMAXVAL)
% function [Ncut] = graphcuts(I)
% Input: I image
% pad: spatial connectivity; eg. 3
% MAXVAL: maximum image value
% Output: Ncut: Binary map 0 or 1 corresponding to image segmentation
I = double(I); [HW] = size(I);
% Find weights between nodes I1 and I2 w = exp(a*abs(I1-I2));
% Set a to have a weight of 0.01 for diff = MAXVAL
a = log(0.01)/MAXVAL; x = [0:MAXVAL/100:MAXVAL]‘; y = exp(a*x);
figure;plot(xy);xlabel(‘intensity diff‘);ylabel(‘weights‘); title(‘weights‘)
ws = 2*pad + 1;
if(ws <= 3)
    ws = 3;
end
%Build the weight matrix
disp(‘Building Weight Matrix‘); close all; tic
WM = zeros(H*WH*W); countWM = 0;
for kk = 1:W
for jj = 1:H
mask = logical(zeros(HW));
cs = kk-pad; ce = kk+pad; rs = jj-pad; re = jj+pad;
if(cs<1) 
    cs = 1; 
end;
if(ce>W)
    ce = W; 
end;
if(rs<1) 
    rs = 1;
end;
if(re>H) 
    re = H; 
end;
mask(rs:recs:ce) = 1;
idx = find(mask==1);
p = abs(I(idx) - I(jjkk)); p = exp(a*p);
countWM = countWM + 1; WM(countWMidx) = p(:)‘;
end
end
ttime = toc; disp(sprintf(‘Time for generating weight matrix = %f‘ttime)); clear countWM
% Weight between a node and iteself is 0
for jj = 1:H*W 
    WM(jjjj) = 0; 
end; 
WM = sparse(WM);
% Shi and Malik Algorithm: second smallest eigen vector
disp(‘Finding Eigen Vector‘);
d = sum(WM2); D = diag(d); tic
B = (D-WM); B = (B+B‘)/2; OPTS.disp = 0;
[vdflag] = eigs(BD2‘SA‘OPTS); ttime = toc;
disp(sprintf(‘Time for finding eigen vector = %f‘ttime)); clear OPTS
y = v(:2);
Ncut = reshape(yHW);
Ncut = Ncut > 0;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1596  2013-03-07 12:18  graphcuts.m
     文件        1307  2014-02-12 14:19  license.txt

评论

共有 条评论