gpt4 book ai didi

image-processing - 在 Logo (视觉样本)中找到什么而不是 SURF?

转载 作者:行者123 更新时间:2023-12-02 00:06:57 37 4
gpt4 key购买 nike

我的任务是在摄影图片中找到 Logo 图像。我需要找到 Logo 并计算它的透视变形( Logo 在塑料卡片上)。

教科书中的经典方法是使用 SURF。不幸的是,SURF 在这里有几个缺点:

1)logo图片特征比较少,在大图上很难找到(实际上效率很低)

2) logo图像有非常显着的着色,SURF不使用

我的问题是:

1) 在大图片中找到小失真图像的任务的正确名称是什么?

2) 除了 SURF 特征匹配之外,还有什么方法可以完成这个任务吗?

例如,我可以想象许多扭曲的标志图像样本,以不同的分辨率数字化。我想如果我开始寻找低分辨率,我可以及早过滤掉不好的假设。逐渐达到更高的分辨率,我可以同时匹配图像并确定它的投影参数。

有些方法是否类似于这种方法?

最佳答案

你试过MSER algorithm了吗? ?它对我来说总是很管用。

---标准答案结束,有时间喜欢图像处理就继续---

在寻找面积相对较小的模板时,我还开发了一种方法,使用模板的稳定极值区域 (SER) 来映射扫描区域,以用于另一种更强大/资源密集型算法。这种方法非常容易实现,并且在我的上一个项目中产生了奇迹。如果您有兴趣,实现如下(MatLab 代码,但没有花哨的函数或矢量化):

尝试使用如下程序识别 Logo 的唯一稳定区间 (MinT-MaxT):

TestImage=imread('Leaves.jpg');

TestImage=rgb2gray(TestImage); %Transform RGB to 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 you don't use the whole bit-depth
MinT=1; %try something like 40-150 if you have high contrast in your logo

for 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;

for i=1:size(TestImage,1);
for j=1:size(TestImage,2)

if OldSER(i,j)==NewSER(i,j) && SpinSER(i,j)==0 % Do the extremal regions remain the same/ are they stable over 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

一旦您确定了适合您所在区域的间隔,就会生成一张 map 来区分图像的其余部分,并在 map 上搜索感兴趣的区域。

MaxT=120;

MinT=40;

Map=zeros(x,y); %Create a map for the SER-filtering


% TestImageMinT=im2bw(Image,MinT/256); %Set the range of the extremal region stability.
% TestImageMaxT=im2bw(Image,MaxT/256);
%
% for i=1:x
% for j=1:y
%
% Map(i,j)=TestImageMaxT(i,j)==TestImageMinT(i,j) ; %Map the pixels that remain stable over the interval
%
% end
% end

Map=abs(Image-(MaxT-MinT)/(2*MaxT))*2*MaxT/(MaxT-MinT); %More or less equivalent to the loop comented above but >10x faster...
Map=Map>0.5; %...

然后将您想要的任何检测器应用于该区域或 ¬(该区域)

Corners = CornerSusanMapped(ImageBW,Map,17);

希望对您有所帮助,玩得开心!

关于image-processing - 在 Logo (视觉样本)中找到什么而不是 SURF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17782757/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com