可用/免费停车空间探测图像分析算法

87(30天)
我在做一个项目附带一个jpg文件,你能帮忙吗?
5个评论

登录置评。

接受的答案

图像分析
图像分析 2020年5月12日
好,不确定多远你已经与我最后的建议,但我生在一起的东西当我在看一个Mathworks研讨会今天下午深度学习。现在你可能已经通过,但值得,这就是我有:
%演示找到可用的停车位。通过图像分析,2020年5月12日。
%需要3图片:“没有Cars.jpg停车场”,与Cars.jpg停车场,停车场Mask.png”
%清理。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
clearvars;
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 16;
流(运行% s的开始。m…\ n”,mfilename);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%阅读与参考图像没有汽车停车场(空)。
文件夹= pwd;
baseFileName =“停车场没有Cars.jpg”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
rgbEmptyImage = imread (fullFileName);
(行、列,numberOfColorChannels) = (rgbEmptyImage)大小;
%显示测试图像尺寸。
次要情节(2、3、2);
imshow (rgbEmptyImage []);
轴(“上”,“图像”);
标题= sprintf (参考图片:“% s”的,baseFileName);
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入测试图像(图片与汽车停在停车场)。
文件夹= pwd;
baseFileName =“与Cars.jpg停车场”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
rgbTestImage = imread (fullFileName);
(行、列,numberOfColorChannels) = (rgbTestImage)大小;
%显示原始图像尺寸。
次要情节(2、3、1);
imshow (rgbTestImage []);
轴(“上”,“图像”);
标题= sprintf (“测试图片:“% s”,baseFileName);
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
%设置图属性:
%全屏放大图。
hFig1 = gcf;
hFig1。单位=“归一化”;
hFig1。WindowState =“最大化”;
%去掉工具栏和下拉菜单的图。
%设置(gcf“工具栏”,“没有”,“菜单”,“没有一个”);
%的标题栏提供一个名称。
hFig1。Name =的演示图像分析师”;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%在掩模图像定义空间的地方。
文件夹= pwd;
baseFileName =“停车场Mask.png”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
maskImage = imread (fullFileName);
(行、列,numberOfColorChannels) = (maskImage)大小;
%从看到创建一个二进制掩模的最小值为255。
掩码= min (maskImage [], 3) = = 255;
%显示测试图像尺寸。
次要情节(2、3、3);
imshow(面具,[]);
轴(“上”,“图像”);
标题= sprintf (“面具形象:“% s”,baseFileName);
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%找到汽车。
%第一,绝对差分图像。
diffImage = imabsdiff (rgbEmptyImage rgbTestImage);
%显示灰度图像。
次要情节(2、3、4);
imshow (diffImage []);
轴(“上”,“图像”);
标题= sprintf (不同图像的);
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
%转换为灰度和面具掩盖它与空间。
diffImage = rgb2gray (diffImage);
diffImage面具(~)= 0;
%得到图像的柱状图我们可以看到,在阈值。
次要情节(2、3、5);
直方图(diffImage (diffImage > 0));
%显示灰度图像。
imshow (diffImage []);
轴(“上”,“图像”);
标题= sprintf (“图像灰度差异”);
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
%的阈值图像发现大大不同于背景像素。
kThreshold = 40;%由检查直方图。
parkedCars = diffImage > kThreshold;
%填补。
parkedCars = imfill (parkedCars,“黑洞”);
%得到凸包。
parkedCars = bwconvhull (parkedCars,“对象”);
%显示面具的形象。
次要情节(2、3、6);
imshow (parkedCars []);
impixelinfo;
轴(“上”,“图像”);
标题= sprintf (的停放的汽车二进制图像阈值= % .1f ',kThreshold);
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%测量白色像素的比例在每个矩形的面具。
道具= regionprops (parkedCars面具,“MeanIntensity”,“重心”,的边界框(“大小));
质心= vertcat (props.Centroid);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%可选排序与kmeans行。只有适合的停车场矩形网格与图像边缘。
%类y形心
numRows = 4;%有4行在停车场停车。
[indexesY, clusterCenterY] = kmeans(质心(:,2),numRows);
%把线穿过面具在空间的y形心行。
k = 1: numRows
yline (clusterCenterY (k),“颜色”,‘g’,“线宽”2);
结束
%把黄色边框为每个空间(是否或可用)。
k = 1:长度(道具)
矩形(“位置”道具(k) .BoundingBox,“EdgeColor”,“y”);
结束
%现在集群的集群不一定是排序1顶部,集群2下面,下面的集群3,集群4底部。
%所以我们需要集群的y值集群中心。
[~,排序方式]=排序(clusterCenterY,“提升”);
%现在对索引和排序我们将从上到下。
originalIndexes = indexesY;%保存一份,这样我们就可以比较,以确保它是正确的。
流(“\ nOriginal类数新类# \ n ');
k = 1:长度(indexesY)
currentClass = indexesY (k);
终极=找到(排序方式= = currentClass);
流(“% d % d \ n”终极,currentClass);
indexesY (k) =终极;
%文本(质心(k, 1),重心(k, 2) -15年,num2str (currentClass),“颜色”,“r”);
%文本(质心(k, 1),重心(k, 2) + 15, num2str(终极),“颜色”,“g”);
结束
% comparedLabels = [originalIndexes (:), indexesY (:));
newLabels = 1:长度(道具);%查阅表我们可以将原始指标映射到一个新的分类索引。
指针= 0;
k = 1: numRows
%这个类(排停车),获得道具在这一行的元素(y值)。
学=找到(indexesY = = k);
% x重心已经从左到右排序值我们好——不需要排序。
newLabels((指针+ 1):(指针+长度(学)))=学;
指针=指针+长度(学);
结束
%现在我们已经新排序顺序,应用它。
道具=道具(newLabels);
% Re-extract这些向量与新秩序。
percentageFilled = [props.MeanIntensity]
质心= vertcat (props.Centroid);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%的地方一个红色的x形象如果空间填满,和一个绿色圆圈,如果空间是可以停在(它是空的)。
%通过每个矩形说是否装满一车。
%我们说了如果10%的像素填充。
hFig2 =图;
imshow (rgbTestImage);
hFig2。WindowState =“最大化”;
%的标题栏提供一个名称。
hFig2。Name =“由ImageAnalyst演示”;
持有;
k = 1:长度(道具)
x =质心(k, 1);
y =质心(k, 2);
blobLabel = sprintf (' % d '、k);
如果percentageFilled (k) > 0.10
%有一辆车在矩形。
情节(x, y,“处方”,“MarkerSize”30岁的“线宽”4);
%的blob标签。
blobLabel文本(x, y + 20日,“颜色”,“r”,“字形大小”15岁的“FontWeight”,“大胆”);
其他的
%没有车停。可用的空间。
情节(x, y,“g”。,“MarkerSize”现年40岁的“线宽”4);
%的blob标签。
blobLabel文本(x, y + 20日,“颜色”,‘g’,“字形大小”15岁的“FontWeight”,“大胆”);
结束
结束
标题(的空间。绿色=的现货供应。红色X =了。”,“字形大小”、字形大小);
流(完成运行% s。m…\ n”,mfilename);
11日评论
里克
里克 2021年10月15日
你应该能够阅读的文档 yline 最新版本的函数 在这里 。你可以通过调用复制同样的效果 (如果你喜欢 情节 您将需要使用 (上) )。您将需要提供(x-limits自己 xlim 函数将派上用场)。主要的区别在于, yline 将如何应对更改x-limits, 对象不会。
当你得到这样的错误这是策略。试图找到它在最新版本的文档,看看它,然后找出你可以实现相同的结果。

登录置评。

更多的答案(2)

图像分析
图像分析 2020年5月12日
查找之前的帖子像沃尔特建议。一种方法可能会有一个模板设置(如二进制图像掩模和一帮矩形)。然后你有一个图像完全空地,测量与regionprops MeanIntensity()为每一个空间。然后用同样的方法为你测试图片,看看平均强度不够明显不同。你也可以从测试图像减去背景,看看有多少blob如果blob重心是包含在一个模板矩形。

默罕默德BILAL
默罕默德BILAL 2021年11月24日
所以这段代码只适用于3图片上吗?我需要运行此代码在三个differnent其他比这个图片。谁能提供给我3除了附加的图片。
9日评论

登录置评。

下载188bet金宝搏


释放

R2020a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!