问题
I am using shape context histograms as a feature descriptor to encode silhouette images. To assist with debugging, I would like to view the shape context logpolar bins overlaid on a silhouette image (the sample points taken from the edge image).
An example of what it should look like for one of the points is as follows:
I know how to display the circles (radial bins), but I am having difficulty in producing the angular bins (lines).
Given a set of angles, how can I draw line segments similar to those shown in the example image?
回答1:
Doing this:
>> figure >> axes >> hold on >> radius = 1; >> theta = 0:30:360; >> for angle = theta line([0 radius * cosd(angle)], [0 radius * sind(angle)]); end
produces this:
回答2:
You can use this function:
function scDrawPolar(samp,point,r_min,r_max,nbins_theta,nbins_r)
%SCDRAWPOLAR draw a polar on the center point
% point - the center point
% r_min - min radius
% r_max - max radius
% nbins_theta - theta divide
% nbins_r - r divide
% fig_handle - draw the diagram on which figure
gca;
hold on;
plot(samp(1,:)',samp(2,:)','r.');
plot(point(1),point(2),'ko');
r_bin_edges=logspace(log10(r_min),log10(r_max),nbins_r);
% draw circles
th = 0 : pi / 50 : 2 * pi;
xunit = cos(th);
yunit = sin(th);
for i=1:length(r_bin_edges)
line(xunit * r_bin_edges(i) + point(1), ...
yunit * r_bin_edges(i) + point(2), ...
'LineStyle', ':', 'Color', 'k', 'LineWidth', 1);
end
% draw spokes
th = (1:nbins_theta) * 2*pi / nbins_theta;
cs = [cos(th);zeros(1,size(th,2))];
sn = [sin(th);zeros(1,size(th,2))];
line(r_max*cs + point(1), r_max*sn + point(2),'LineStyle', ':', ...
'Color', 'k', 'LineWidth', 1);
axis equal;
axis off;
hold off;
end
See the result here:
来源:https://stackoverflow.com/questions/5258740/drawing-shape-context-logpolar-bins-in-matlab