检测单个图像中的多个图像
2022-09-01 05:04:04
我需要帮助来识别边框并将图像与原始图像进行比较。我需要有关如何通过处理或matlab或任何初学者来实现这一目标的指导。例如,请看下图。
原始图像:
多图像:
我需要帮助来识别边框并将图像与原始图像进行比较。我需要有关如何通过处理或matlab或任何初学者来实现这一目标的指导。例如,请看下图。
原始图像:
多图像:
您展示的“多图像”很容易使用简单的图像处理来处理,无需模板匹配:)
% read the second image
img2 = imread('http://i.stack.imgur.com/zyHuj.jpg');
img2 = im2double(rgb2gray(img2));
% detect coca-cola logos
bw = im2bw(img2); % Otsu's thresholding
bw = imfill(~bw, 'holes'); % fill holes
stats = regionprops(bw, {'Centroid', 'BoundingBox'}); % connected components
% show centers and bounding boxes of each connected component
centers = vertcat(stats.Centroid);
imshow(img2), hold on
plot(centers(:,1), centers(:,2), 'LineStyle','none', ...
'Marker','x', 'MarkerSize',20, 'Color','r', 'LineWidth',3)
for i=1:numel(stats)
rectangle('Position',stats(i).BoundingBox, ...
'EdgeColor','g', 'LineWidth',3)
end
hold off
您可以使用关联方法来定位多个图像:
file1='http://i.stack.imgur.com/1KyJA.jpg';
file2='http://i.stack.imgur.com/zyHuj.jpg';
It = imread(file1);
Ii = imread(file2);
It=rgb2gray(It);
Ii=rgb2gray(Ii);
It=double(It); % template
Ii=double(Ii); % image
Ii_mean = conv2(Ii,ones(size(It))./numel(It),'same');
It_mean = mean(It(:));
corr_1 = conv2(Ii,rot90(It-It_mean,2),'same')./numel(It);
corr_2 = Ii_mean.*sum(It(:)-It_mean);
conv_std = sqrt(conv2(Ii.^2,ones(size(It))./numel(It),'same')-Ii_mean.^2);
It_std = std(It(:));
S = (corr_1-corr_2)./(conv_std.*It_std);
imagesc(abs(S))
结果将为您提供具有最大值的仓位:
获取maxima的坐标,并将模板质心定位在同一位置,检查模板与匹配图像之间的差异。
我不确定你说的“识别边界”是什么意思,但你总是可以用精明的探测器提取边缘:
bw=edge(It);
bw=imfill(bw,'holes');
figure,imshow(bw)