画像内のオブジェクトの位置を検出するために2D相関アルゴリズムを実装しようとしていますが、組み込みの関数推定2D相関を使用したくありません。
これが私のコードです:
I=imread('image.tif'); % image is a black image contains white letters.
h=imread('template.tif'); %template is a small image taken from the original image, it contains one white letter.
I=double(I);
h=double(h);
[nrows ncolumns]=size(I);
[nrows2 ncolumns2]=size(h);
C=zeros(nrows,ncolumns);
for u=1:(nrows-nrows2+1)
for v=1:(ncolumns-ncolumns2+1)
for x=1:nrows2
for y=1:ncolumns2
C(u,v)=C(u,v)+(h(x,y)*I(u+x-1,v+y-1));
end
end
end
end
[maxC,ind] = max(C(:));
[m,n] = ind2sub(size(C),ind) % the index represents the position of the letter.
output_image=(3.55/4).*C./100000;
imshow(uint8(output_image));
私はそれが働いていると思います!しかし、それは非常に遅いです。
アルゴリズムを高速化するために、次のコードをより良いコードに置き換えるにはどうすればよいですか?
for x=1:nrows2
for y=1:ncolumns2
C(u,v)=C(u,v)+(h(x,y)*I(u+x-1,v+y-1));
end
end
私は毎回次の2つの行列があると思っています
h(1:nrows2,1:ncolumns2)
とI(u:u+nrows2-1,v:v+ncolumns2-1)
別の質問、何か改善はありますか?
ありがとう。