Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何计算对象在图像中的出现次数?_Matlab_Image Processing_Computer Vision_Image Recognition - Fatal编程技术网

Matlab 如何计算对象在图像中的出现次数?

Matlab 如何计算对象在图像中的出现次数?,matlab,image-processing,computer-vision,image-recognition,Matlab,Image Processing,Computer Vision,Image Recognition,我有一组彩色形状的图像,我想从中计算蓝色正方形的出现次数,其中我有一个模板图像。目前,我的想法是从图像中提取一个只包含蓝色形状的二值图像,然后使用二值化模板来计算出现的次数,但我不确定如何进行下半部分。以下是我当前的工作代码: clear; I1 = imread("im1.jpg"); I2 = imread("im2.jpg"); I3 = imread("im3.jpg"); temp = imread("temp.p

我有一组彩色形状的图像,我想从中计算蓝色正方形的出现次数,其中我有一个模板图像。目前,我的想法是从图像中提取一个只包含蓝色形状的二值图像,然后使用二值化模板来计算出现的次数,但我不确定如何进行下半部分。以下是我当前的工作代码:

clear;

I1 = imread("im1.jpg");
I2 = imread("im2.jpg");
I3 = imread("im3.jpg");
temp = imread("temp.png");

% Get the image color chanels
Ir1 = I1(:,:,1);
Ig1 = I1(:,:,2);
Ib1 = I1(:,:,3);

Ir2 = I2(:,:,1);
Ig2 = I2(:,:,2);
Ib2 = I2(:,:,3);

Ir3 = I3(:,:,1);
Ig3 = I3(:,:,2);
Ib3 = I3(:,:,3);

% Get blue only
IBlue1 = Ib1 - Ir1 - Ig1;
IBlue2 = Ib2 - Ir2 - Ig2;
IBlue3 = Ib3 - Ir3 - Ig3;

% Dilate, erode and fill holes
se = strel('disk', 15);
IBlue1 = imfill(imerode(imdilate(IBlue1, se),se),'holes') > 0;
IBlue2 = imfill(imerode(imdilate(IBlue2, se),se),'holes') > 0;
IBlue3 = imfill(imerode(imdilate(IBlue3, se),se),'holes') > 0;
以下是输出:


我的问题是形状可能重叠,例如在
im2
im3
中,这会使找到正方形变得困难。此外,我不确定如何计算方块数?有什么建议吗?

你想先侵蚀,然后扩张?或者比你扩张的东西侵蚀得更多。重叠形状中的问题是,你使形状“膨胀”(扩张),然后移除东西,但这将它们连接在一起。如果我没有很好地解释我自己,我很抱歉。我的意思是,在
im2
im3
中,蓝色正方形隐藏在其他形状下,因此只能部分看到。我的问题是如何将部分正方形与模板正方形进行匹配?3D模板匹配是一个很大的领域,您肯定需要比此处更多的代码。我认为这是一项繁重的深入学习任务。您可以用其他形状覆盖蓝色矩形,使其只剩下一个蓝色三角形可见。在一张从顶部拍摄的没有阴影的照片中,就像最右边的一样,你无法使用IP技术将这种形状与三角形区分开来。即使有一个深网,你在检测这个矩形时也会遇到严重的问题。再多的深度学习也看不到没有看到的东西。如果你想在知道必须有什么形状的情况下匹配部分形状,这在没有深入学习的情况下已经是可行的。你想先腐蚀,然后扩张吗?或者比你扩张的东西侵蚀得更多。重叠形状中的问题是,你使形状“膨胀”(扩张),然后移除东西,但这将它们连接在一起。如果我没有很好地解释我自己,我很抱歉。我的意思是,在
im2
im3
中,蓝色正方形隐藏在其他形状下,因此只能部分看到。我的问题是如何将部分正方形与模板正方形进行匹配?3D模板匹配是一个很大的领域,您肯定需要比此处更多的代码。我认为这是一项繁重的深入学习任务。您可以用其他形状覆盖蓝色矩形,使其只剩下一个蓝色三角形可见。在一张从顶部拍摄的没有阴影的照片中,就像最右边的一样,你无法使用IP技术将这种形状与三角形区分开来。即使有一个深网,你在检测这个矩形时也会遇到严重的问题。再多的深度学习也看不到没有看到的东西。如果您想在知道必须存在哪些形状时匹配部分形状,则无需深入学习即可实现。