Tom*_*rge 2 matlab image-processing computer-vision matlab-cvst
我有一个包含几个特定对象的图像.我想在这张图片中检测这些物体的位置.为此,我有一些包含我想要检测的对象的模型图像.这些图像在我想要检测的对象实例周围被很好地裁剪.
这是一个例子:
在这张大图中,

我想检测此模型图像中表示的对象:

abc*_*bcd 38
由于您最初将此作为'gimme-da-codez'问题发布,完全没有表现出来,我不打算给您代码.我将概括地描述这种方法,并提供一些提示,并由您决定要执行的确切代码.
首先,如果您有一个模板,一个更大的图像,并且您想在图像中找到该模板的实例,请始终考虑互相关.无论您是处理1D信号(在信号处理中称为匹配滤波器)还是处理2D图像,理论都是相同的.
normxcorr2并理解文档中的示例.N点信号与M点信号的互相关导致N + M -1点输出的事实有关.一旦你阅读了互相关,这应该是清楚的,但你也应该看看我上面提到的文档中的例子来获得一个想法.一旦你做了这两个,那么其余的都是微不足道的,只需要对你的结果进行化妆打扮.这是我在检测到上述对象后的结果.

这里有一些代码提示可以帮到你.无论我在哪里填写休息...
%#read & convert the image
imgCol = imread('http://i.stack.imgur.com/tbnV9.jpg');
imgGray = rgb2gray(img);
obj = rgb2gray(imread('http://i.stack.imgur.com/GkYii.jpg'));
%# cross-correlate and find the offset
corr = normxcorr2(...);
[~,indx] = max(abs(corr(:))); %# Modify for multiple instances (generalize)
[yPeak, xPeak] = ind2sub(...);
corrOffset = [yPeak - ..., xPeak - ...];
%# create a mask
mask = zeros(size(...));
mask(...) = 1;
mask = imdilate(mask,ones(size(...)));
%# plot the above result
h1 = imshow(imgGray);
set(h1,'AlphaData',0.4)
hold on
h2 = imshow(imgCol);
set(h2,'AlphaData',mask)
Run Code Online (Sandbox Code Playgroud)
以下是我在问题结束时即将发布的答案.我想这与yoda的答案类似.
您可以尝试使用规范化的交叉核心化:
im=rgb2gray(imread('di-5Y01.jpg'));
imObj=rgb2gray(imread('di-FNMJ.jpg'));
score = normxcorr2(imObj,im);
imagesc(score)
Run Code Online (Sandbox Code Playgroud)
结果是:(如您所见,最白点对应于对象的位置.)

| 归档时间: |
|
| 查看次数: |
4750 次 |
| 最近记录: |