【发布时间】:2014-06-03 16:35:50
【问题描述】:
我正在做一个与模板匹配图像处理相关的项目,我已经完成了匹配算法,但我面临的问题是,模板匹配器总是产生与模板图像的源图像匹配的最佳关联关系,但我想仅当所需的输出既不是错误输出时才通知或响应。我想用 arduino 板 UNO R3 串行通信 MATLAB 代码,它会在输出到来时产生双向脉冲?那我该怎么办? 这是代码:
cam=videoinput('winvideo',2,'YUY2_320x240');
start(cam);
preview(cam);
set(cam,'ReturnedColorSpace','RGB');
get=input('get frame ???');
frame=getsnapshot(cam);
imwrite(frame,'got.jpg');
I=imread('D:\Template matcher\got.jpg');
H_Eq=vision.HistogramEqualizer;
Temlate_matcher=vision.TemplateMatcher;
Temlate_matcher.Metric='Maximum absolute difference';
Temlate_matcher.OutputValue='Metric matrix';
marker_inserter=vision.MarkerInserter('Size',30,'Fill',false,'FillColor','White','Opacity',0.75);
I=rgb2gray(I);
I=step(H_Eq,I);
Template1=imread('D:\Template matcher\ge.jpg');
Template1=rgb2gray(Template1);
H_Eq=vision.HistogramEqualizer;
Template1=step(H_Eq,Template1);
Location1=step(Temlate_matcher,I,Template1);
marker_inserter.Shape='Square'
output_image=step(marker_inserter,I,Location1);
figure();imshow(output_image);
【问题讨论】:
-
您始终可以设置一个阈值,例如最好的分数是 80% 或更高。如果您的模板匹配分数高于此阈值,那么这应该非常表明匹配良好,您可以向您的 Arduino 板发出信号,表明您找到了有价值的东西。
-
需要更多解释,因为我不熟悉阈值
-
您在问题中指出,当您进行模板匹配时,输出将是与最佳得分的相关性。有时,最好的分数可能很差……大概是 30%。这意味着即使获得了这个最高分数,您也不太可能找到了您正在寻找的对象。这就是为什么强制实施阈值是个好主意。当您找到最佳分数时,如果该分数高于某个阈值(例如 80%),那么这可能表明该对象确实在图像中。
-
因此,使用您的相关分数,并检查它是否高于某个阈值。如果是,那么对象就在那里(希望如此),如果不是,那么它不应该存在(希望如此!)。
-
这对我来说是可以理解的,但我使用模板匹配器、直方图均衡器等内置功能并以灰度处理图像,那么我该如何设置阈值呢?在 MATLAB 2012 中
标签: matlab templates image-processing arduino template-matching