如果您有太多的操作,请考虑如何减少它们.
对于这个问题,我会使用图像积分.
如果你在图像上对求和内核进行卷积(这是fft域中的一个非常快速的操作,只有conv2,imfilter),你知道只有积分等于5的位置(在你的情况下)才是可能的模式匹配位置.检查那些(即使你的4次旋转)应该在计算上非常快.示例图像中的位置不能超过50个适合此模式的位置.
我的python不太流畅,但这是你在MATLAB中第一个图像的概念证明,我确信翻译这段代码应该不是问题.
% get the same image you have (imgur upscaled it and made it RGB)
I=rgb2gray(imread('https://i.stack.imgur.com/l3u4A.png'));
I=imresize(I,[9 11]);
I=double(I>50);
% Integral filter definition (with your desired size)
h=ones(3,4);
% horizontal and vertical filter (because your filter is not square)
Ifiltv=imfilter(I,h);
Ifilth=imfilter(I,h');
% find the locations where integral is exactly the value you want
[xh,yh]=find(Ifilth==5);
[xv,yv]=find(Ifiltv==5);
% this is just plotting, for completeness
figure()
imshow(I,[]);
hold on
plot(yh,xh,'r.');
plot(yv,xv,'r.');
这导致14个位置进行检查.我的标准计算机在计算两个图像积分时平均需要230ns,我会称之为快速.
GPU计算也不是黑客攻击:D.由于它们拥有巨大的计算能力,它可以解决大量问题.例如. GPU中的卷积非常快.