停车位检测基于matlab K-means算法停车位检测含Matlab源码 2068期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了停车位检测基于matlab K-means算法停车位检测含Matlab源码 2068期相关的知识,希望对你有一定的参考价值。
⛄一、简介(附参考文献)
K-means将雷达接收到的稀疏数据聚类为不同的簇进行目标检测,聚类结果取决于参数K值和初始化中心的选取。K表示最终所聚类得到的类别,不同初始化聚类中心点和K值会得到不同结果。每一轮迭代重新计算质心位置,直至质心不再变化。
传统K-means聚类为无监督学习,而每个检测场景中毫米波雷达检测的目标数量是一定的。若K值不准确,则聚类结果是错误的。传统的K-means通过肘部原则来确定K值,将检测点与各簇的聚类中心的平方差和定义为畸变函数,如式(1)所示。该函数值会随着K值的增大而降低,达到某个K值后,收敛速度放慢,该K值则为K-means中最佳初始化K值。
式中:d2jc——第c簇中第j个检测点距离簇中心的距离平方和;xj,yj——第j个检测点的横、纵坐标;xc0,yc0——第c簇中心的横、纵坐标。
传统K-means聚类算法的复杂度为O(nm T),n为样本集的个数,m为类别数,T为最大迭代次数。若已知初始化中心和K值,则不再进行最大次数与肘部原则选取K值的迭代,此时复杂度为O(1),且正确的K值将得到准确的检测结果。
⛄二、部分源代码
function varargout = interface(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @interface_OpeningFcn, …
‘gui_OutputFcn’, @interface_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin1)
gui_State.gui_Callback = str2func(varargin1);
end
if nargout
[varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
gui_mainfcn(gui_State, varargin:);
end
function interface_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = interface_OutputFcn(hObject, eventdata, handles)
varargout1 = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
% Asignacion de imagenes
texto = get(handles.edit3,'String');
texto = strcat('Prueba/',texto);
im = imread(texto);
w=im;
axes(handles.axes4)
imshow(im)
im = rgb2gray(im); % Grizacion de imagen a analizar
parque = imread('Prueba/park1.jpg');
parque = rgb2gray(parque); % Grizacion de imagen sin autos
th = 210; % Valor de Treshold
parque(parque < th) = 0;
parque(parque >= th) = 255;
im(im < th) = 0;
im(im >= th) = 255;
% Operaciones Morfologicas
SE = imfill(im,'holes');
SEparque = imfill(parque, 'holes');
% Escalamiento de letras
p = imread('Entrenamiento/1-1.bmp');
p = imresize(p, 0.1);
p = imfill(p,'holes');
e = imread('Entrenamiento/1-2.bmp');
e =imresize(e, 0.1);
% Correlaci髇 Cruzada
acorr_P = normxcorr2(p,SE);
acorrparque_P = normxcorr2(p,SEparque);
acorr_E = normxcorr2(e,SE);
acorrparque_E = normxcorr2(e,SEparque);
% Asignaci髇 de Maximos Relativos
[fx_P fy_P] = find(acorr_P >= 0.55); % Deteccion de maximos relativos
[fxparque_P fyparque_P] = find(acorrparque_P >= 0.55);
Xparque_P = [fxparque_P fyparque_P];
[idx_P, C_P] = kmeans(Xparque_P,10); % Clusterizacion
X_P = [fx_P fy_P];
[n_P m_P] = size(X_P);
[fx_E fy_E] = find(acorr_E >= 0.55); % Deteccion de maximos relativos
[fxparque_E fyparque_E] = find(acorrparque_E >= 0.55);
Xparque_E = [fxparque_E fyparque_E];
[idx_E, C_E] = kmeans(Xparque_E,2); % Clusterizacion
X_E = [fx_E fy_E];
[n_E m_E] = size(X_E);
% Verificaci髇 de Centroides con los maximos Relativos para la letra P
num_datos_P = length(X_P);
num_centroides_P = length(C_P);
posicion_P = zeros(1,10);
contador_P = 0;
for i = 1:num_centroides_P
for j=1:num_datos_P
d_P = sqrt((C_P(i,1)-X_P(j,1)).^2 + (C_P(i,2)-X_P(j,2)).^2);
if d_P > 20
else
posicion_P(i) = 1;
end
end
end
% Verificaci髇 de Centroides con los maximos Relativos para la letra E
num_datos_E = length(X_E);
num_centroides_E = length(C_E);
posicion_E = zeros(1,2);
contador_E = 0;
for i = 1:num_centroides_E
for j=1:num_datos_E
d_E = sqrt((C_E(i,1)-X_E(j,1)).^2 + (C_E(i,2)-X_E(j,2)).^2);
if d_E > 20
else
posicion_E(i) = 1;
end
end
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]程书慧,陈凌珊,杨军典.一种基于K-means的雷达机动目标检测算法[J].农业装备与车辆工程. 2022,60(07)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于停车位检测基于matlab K-means算法停车位检测含Matlab源码 2068期的主要内容,如果未能解决你的问题,请参考以下文章
车牌识别基于matlab GUI停车计费系统含Matlab源码 735期
基于YOLOv5的停车位检测系统(清新UI+深度学习+训练数据集)