image processing - What instead of SURF in logo (visual sample) finding? -
i have task find logo image within photographic picture. need locate logo , calculate it's perspective distortion (logos on plastic cards).
classic way textbooks use surf. unfortunately, surf has several disadvantages here:
1) logo image has relatively few features , hard find within big picture (actually effectiveness appeared low)
2) logo image has significant coloring, surf not use
my questions are:
1) correct name of task of finding small distorted image inside big picture?
2) there methods task, other surf features matching?
for example, can imagine many samples of distorted logo image, digitized different resolutions. think if start finding @ low resolution, filter out bad hypotheses early. going gradually higher resolutions, simultaneously match image , determine it's projection parameters.
are methods resembling approach?
have tried mser algorithm? worked great me.
---end of standard answer, proceed if have time , enjoy playing image processing---
also in searching template relatively small area developed approach use template's stable extremal regions (ser) map scanning area another, more powerful/resource-intensive algorithm. approach extremely easy implement , worked wonders in last project. if interested, implementation follows (matlab code, no fancy functions or vectorization):
try identify unique stability interval (mint-maxt) of logo program this:
testimage=imread('leaves.jpg'); testimage=rgb2gray(testimage); %transform rgb grayscale newser=zeros(size(testimage)); %initialise stuff oldser=zeros(size(testimage)); spinser=zeros(size(testimage)); hot=zeros(size(testimage)); %your stability map maxt=255; %your interval, unlike mser don't use whole bit-depth mint=1; %try 40-150 if have high contrast in logo k=maxt:-1:mint testimage1=im2bw(testimage,k/256); imshow(abs(hot/interval)) colormap(hot) hold on text(20,30,['treshold: ',num2str(k)],'color','k','fontweight','bold','fontsize',16,'backgroundcolor','r') hold off oldser=newser; newser=testimage1; i=1:size(testimage,1); j=1:size(testimage,2) if oldser(i,j)==newser(i,j) && spinser(i,j)==0 % extremal regions remain same/ stable on both thresholds? hot(i,j)=hot(i,j)+1; else hot(i,j)=hot(i,j)-1; spinser(i,j)=1; end end end shg pause(0.1) end
once identified interval works region generate map discriminate rest of image, , search map regions of interest.
maxt=120; mint=40; map=zeros(x,y); %create map ser-filtering % testimagemint=im2bw(image,mint/256); %set range of extremal region stability. % testimagemaxt=im2bw(image,maxt/256); % % i=1:x % j=1:y % % map(i,j)=testimagemaxt(i,j)==testimagemint(i,j) ; %map pixels remain stable on interval % % end % end map=abs(image-(maxt-mint)/(2*maxt))*2*maxt/(maxt-mint); %more or less equivalent loop comented above >10x faster... map=map>0.5; %...
and apply whatever detector want area or ¬(that area)
corners = cornersusanmapped(imagebw,map,17);
hope helps , have fun!
Comments
Post a Comment