📄 count_squares.m
字号:
function ns = count_squares(I,x1,y1,x2,y2,win);
%keyboard;
[ny,nx] = size(I);
lambda = [y1 - y2;x2 - x1;x1*y2 - x2*y1];
lambda = 1/sqrt(lambda(1)^2 + lambda(2)^2) * lambda;
l1 = lambda + [0;0;win];
l2 = lambda - [0;0;win];
dx = x2-x1;
dy = y2 - y1;
if abs(dx) > abs(dy),
if x2 > x1,
xs = x1:x2;
else
xs = x1:-1:x2;
end;
ys = -(lambda(3) + lambda(1)*xs)/lambda(2);
else
if y2 > y1,
ys = y1:y2;
else
ys = y1:-1:y2;
end;
xs = -(lambda(3) + lambda(2)*ys)/lambda(1);
end;
Np = length(xs);
xs_mat = ones(2*win + 1,1)*xs;
ys_mat = ones(2*win + 1,1)*ys;
win_mat = (-win:win)'*ones(1,Np);
xs_mat2 = round(xs_mat - win_mat * lambda(1));
ys_mat2 = round(ys_mat - win_mat * lambda(2));
ind_mat = (xs_mat2 - 1) * ny + ys_mat2;
ima_patch = zeros(2*win + 1,Np);
ima_patch(:) = I(ind_mat(:));
%ima2 = ima_patch(:,win+1:end-win);
filtk = [ones(win,Np);zeros(1,Np);-ones(win,Np)];
out_f = sum(filtk.*ima_patch);
out_f_f = conv2(out_f,[1/4 1/2 1/4],'same');
out_f_f = out_f_f(win+1:end-win);
ns = length(find(((out_f_f(2:end)>=0)&(out_f_f(1:end-1)<0)) | ((out_f_f(2:end)<=0)&(out_f_f(1:end-1)>0))))+1;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -