我曾嘗試使用在this answer提供的代碼來檢測使用模板匹配的符號與FFT(經由fft2
)如何用matlab
但是,代碼只檢測到一個符號,以檢測圖像的符號的多個實例,但它不檢測所有類似的符號。
該代碼已從鏈接的帖子改編而來,如下所示。
template=im2bw(imread(http://www.clipartkid.com/images/543/floor-plan-symb-aT0MYg-clipart.png));
background=im2bw(imread(http://www.the-house-plans-guide.com/images/blueprints/draw-floor-plan-step-6.png));
bx = size(background, 2);
by = size(background, 1);
tx = size(template, 2); % used for bbox placement
ty = size(template, 1);
pos=[];
%// Change - Compute the cross power spectrum
Ga = fft2(background);
Gb = fft2(template, by, bx);
c = real(ifft2((Ga.*conj(Gb))./abs(Ga.*conj(Gb))));
%% find peak correlation
[max_c, imax] = max(abs(c(:)));
[ypeak, xpeak] = find(c == max(c(:))); % Added to make code work
if ~isempty(ypeak) || ~isempty(xpeak)
pos=position;
plot(xpeak,ypeak,'x','LineWidth',1,'Color','g');
rectangle('position',position,'edgecolor','b','linewidth',1, 'LineStyle', '- ');
end
我該如何使用上面的代碼來檢測多個符號而不是一個?
你把在C,讓你只有一個點只最大值。取而代之的是從最大值開始的所有點距離。 –
如何從最大值查找epsilon距離 –
嘗試將c中的唯一值分爲兩組(可能使用kmeans)。一個簡單的方法就是從最大值中取出一個STD。或者採用c中的唯一值的直方圖,並嘗試查看是否可以輕鬆找到相關值下降的點。 –