xcorr 2 max indexes

1 回表示 (過去 30 日間)
michael scheinfeild
michael scheinfeild 2014 年 10 月 20 日
hi i want to find the max index of corner i do 2 times xcorr 2 in the left i have good index while in the right not
*
a=imread('filename000.jpg');
b=im2bw(a);
borg=b;
se0=strel('line',5,0);
se1=strel('line',5,90);
bdil=imdilate(imdilate(b,se0),se1);
stats=regionprops(bdil,'MajorAxisLength','MinorAxisLength','FilledArea','PixelIdxList','PixelList');
MajorAxisLength = [stats.MajorAxisLength];
MinorAxisLength = [stats.MinorAxisLength];
FilledArea = [stats.FilledArea];
% PixelIdxList = [stats.PixelIdxList];
% PixelList =[stats.PixelList];
medMajorAxisLength = median(MajorAxisLength);
medMinorAxisLength = median(MinorAxisLength);
medFilledArea = median(FilledArea);
maxMajorAxisLength = max(MajorAxisLength);
maxMinorAxisLength = max(MinorAxisLength);
maxFilledArea = max(FilledArea);
idxAxisMajor = find(MajorAxisLength<0.5*(medMajorAxisLength+maxMajorAxisLength));
idxAxisMinor = find(MinorAxisLength<0.5*(medMinorAxisLength+maxMinorAxisLength));
idxArea = find(FilledArea<0.5*(medFilledArea+maxFilledArea));
idxEliminate = union(union(idxAxisMajor,idxAxisMinor),idxArea);
bcopy=bdil;
for(m=idxEliminate)
bcopy(stats(m).PixelIdxList)=0;
end
% second iteration
bcopyDil=imerode(imerode(bcopy,se0),se1);
stats=regionprops(bcopyDil,'MajorAxisLength','MinorAxisLength','FilledArea','PixelIdxList','PixelList');
MajorAxisLength = [stats.MajorAxisLength];
MinorAxisLength = [stats.MinorAxisLength];
FilledArea = [stats.FilledArea];
maxMajorAxisLength = max(MajorAxisLength);
idxEliminate = find(MajorAxisLength<maxMajorAxisLength);
bcopy=bcopyDil;
for(m=idxEliminate)
bcopy(stats(m).PixelIdxList)=0;
end
% more dilate
bdil=imdilate(imdilate(bcopy,se0),se1);
b=bdil;
%%template
n=150;
zleft=zeros(n);
zleft(1:n-2,2:3)=1;
zleft(n-3:n-2,2:end)=1;
zright=zeros(n);
zright(1:n-2,n-3:n-2)=1;
zright(n-3:n-2,1:end-2)=1;
%%match left
cc = xcorr2(double(b),double(zleft));
figure,imagesc(cc);title('left correlation');
[max_cc, imax] = max(abs(cc(:)));
[ypeak, xpeak] = ind2sub(size(cc),imax(1));
corr_offset = [ (ypeak-size(zleft,1)) (xpeak-size(zleft,2)) ];
hold on,plot(xpeak,ypeak,'ys')
yleft = corr_offset(1)+n-2;
xleft = corr_offset(2)+1;
figure(100),imshow(borg),hold on,plot(xleft,yleft,'rs');title('corr found edge')
%%match rigth
cc = xcorr2(double(b),double(zright));
figure,imagesc(cc);title('right correlation');
[max_cc, imax] = max(abs(cc(:)));
[ypeak, xpeak] = ind2sub(size(cc),imax(1));
corr_offset = [ (ypeak-size(zright,1)) (xpeak-size(zright,2)) ];
hold on,plot(xpeak,ypeak,'ys')
%%her i not recive the good index
yright = corr_offset(1)+n-2;
xright = corr_offset(2)+1;
% figure(100),imshow(b),hold on,plot(xleft,yleft,'rs');title('corr found edge')*

回答 (0 件)

カテゴリ

Help Center および File ExchangeAudio and Video Data についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by