Reconhecimento de sinais de trânsito com base em Matlab

        O aumento da posse de carros cria perigos no trânsito, em parte porque motoristas e veículos não reconhecem bem as informações dos sinais de trânsito. Fornecer aos motoristas boas informações de trânsito e ajudá-los a fazer julgamentos por meio de alguns meios técnicos pode reduzir a taxa de acidentes de trânsito; ao mesmo tempo, como uma parte importante da percepção ambiental, o reconhecimento de sinais de trânsito pode fornecer boas informações de sinais de trânsito para a condução de veículos e melhorar a experiência de condução. Com base nesses dois pontos, é de importância prática e teórica estudar a identificação de sinais de trânsito. A tecnologia de reconhecimento de sinais de trânsito pode ser dividida em duas categorias: métodos tradicionais de detecção e métodos baseados em aprendizado profundo. Botão: "1341703358" ; você pode obter recursos detalhados

1.1 Segmentação de cores

Espaços de cores comuns são RGB, LAB, HSV, etc. O modelo RGB está intimamente relacionado ao sistema visual humano, ou seja, todas as cores são combinações de diferentes proporções de R vermelho, G verde e B azul. As vantagens são intuitivas e fáceis de entender, mas a correlação entre suas variáveis ​​é demais forte; o modelo LAB se concentra mais na uniformidade perceptiva, L representa brilho, positivo e negativo de A representam vermelho e verde, positivo e negativo de B representam amarelo e azul, e o recurso é que as informações de cor e brilho podem ser ajustadas separadamente; HSV é um modelo não linear, H representa o ângulo polar e S representa Saturação, V significa leveza e o espaço de cores HSV é usado mais no campo de visão de máquina e processamento de imagem, que pode expressar de forma mais intuitiva o matiz, a vivacidade e o brilho , e é mais propício ao contraste de cores. Além disso, os vários modelos podem ser convertidos entre si.

1.2 Detecção de Forma

        Execute a detecção de borda na imagem segmentada por cores para obter as características de contorno de borda de cada canal de conexão e, em seguida, use o algoritmo projetado para as características de forma do próprio sinal de trânsito para detectar o contorno com esse recurso. A região obtida é definida como um região de interesse para extração de características e classificação de classificadores. A área onde o valor de cinza do pixel muda bruscamente em uma imagem é chamada de borda da imagem. Em termos simples, a detecção de borda é conectar pixels de borda em uma imagem para formar uma área fechada, de modo que o logotipo possa ser facilmente distinguido do plano de fundo.

1.3 Extração e classificador de recursos

        A chave para o reconhecimento de sinais de trânsito e outras imagens é usar um algoritmo ou modelo rápido e robusto para extrair as informações que descrevem efetivamente o alvo de detecção na imagem e usar essas informações para distingui-lo de outras imagens. Extração. Por exemplo, a equipe vencedora do ImageNet Large Scale Visual Recognition Challenge em 2010 e 2011 usou algoritmos como SIFT e LBP para extrair recursos manualmente e depois os usou para classificação do classificador, alcançando uma taxa de erro de 28,2%. Os métodos tradicionais de extração de recursos incluem HOG, LBP, SIFT e assim por diante. SIFT (transformação de recurso invariante de escala) usa alguns pontos locais no objeto que estão relacionados ao objeto e não têm nada a ver com o tamanho e a direção de rotação para representar o objeto, o que pode reduzir o impacto da iluminação, ruído etc. no objeto reconhecimento; HOG (Histogram of Orientation Gradient) A forma do alvo local é descrita pelo gradiente, e as informações de contorno da imagem são capturadas por este recurso; LBP (modo binário local) usa o valor de cinza do pixel central como o threshold para obter o código binário correspondente para representar o recurso de textura local. Após a extração do recurso, um classificador é usado para classificá-lo. Como classificador Bayesiano, máquina de vetor de suporte, classificador de rede neural e Adaboost, etc.

1.4 Implementação do Código


% 在Traffic_Iden变得可见之前执行
function Traffic_Iden_OpeningFcn(hObject, eventdata, handles, varargin)
% .此函数没有输出args,请参见输出FCN
% hObject    图的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)
% varargin   Traffic_Iden的命令行参数(见VARARGIN)


% 选择Traffic_Iden的默认命令行输出
handles.output = hObject;
handles.cd0 = cd;
handles.Color = 0;
handles.I = [];

axes(handles.axes1);
set(gca,'Xtick',[]);%去除x轴的刻度
set(gca,'Ytick',[]);%去除y轴的刻度
box on;

axes(handles.axes2);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;

axes(handles.axes3);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;

axes(handles.axes4);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;

% 更新句柄结构
guidata(hObject, handles);


%UIWA IT使Traffic_Iden等待用户响应(参见UIRESUME)
% uiwait(handles.figure1);


% 此函数的输出返回到命令行
function varargout = Traffic_Iden_OutputFcn(hObject, eventdata, handles) 
% varargout 用于返回输出arg的vargout单元数组
% hObject   图的句柄
% eventdata 保留-在未来的MATLAB版本中定义
% handles   具有句柄和用户数据的结构(参见GUIDATA)

% 获取句柄结构中的默认命令行
varargout{1} = handles.output;


% 按单选按钮3中的按钮执行。
function radiobutton3_Callback(hObject, eventdata, handles)
% hObject    单选按钮3的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)


%提示:get(hObject,‘Value’)返回单选按钮3的切换状态


% 按单选按钮4中的按钮执行。
function radiobutton4_Callback(hObject, eventdata, handles)
% hObject    单选按钮4的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)

%提示:get(hObject,‘Value’)返回单选按钮4的切换状态


% 按单选按钮5中的按钮执行
function radiobutton5_Callback(hObject, eventdata, handles)
% hObject    单选按钮5的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of radiobutton5


	
%执行按钮按下按钮1。
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    按钮1的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)
%%  读图
axes(handles.axes1);
cla;%清除坐标系,相当于初始化axes
axes(handles.axes2);
cla;
axes(handles.axes3);
cla;
axes(handles.axes4);
cla;
if filename

    cd(cd1);%目录
    d = imread(filename);%获取图片数据
    cd(handles.cd0);
    handles.I = d;
    axes(handles.axes1);%创建坐标系
    imshow(d);%显示灰度图
    handles.filename = filename; 

    box on;%显示右边和上边框
    
end

handles.Color = 0;
cd(handles.cd0);
set(handles.text2,'string','');
guidata(hObject, handles);


% 执行按钮按下按钮2。
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    按钮2的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)
%% 提取标志
% 按照颜色来分
Color = 0; % 颜色标记  1是红 2 是蓝 3是黄色

if get(handles.radiobutton3,'Value')
    
    Color = 1;
    
elseif get(handles.radiobutton4,'Value')
    
    Color = 2;
    
elseif get(handles.radiobutton5,'Value')
        
        DI = rgb2gray(Image);  %灰度图
        
end

axes(handles.axes2);
imshow(DI);

axes(handles.axes3);

imshow(GI);

handles.GI = GI;

guidata(hObject, handles);

1.5 Resultados

referências

[1] Semáforos rodoviários GB14887-2011.

[2] Chen Chao. Exemplos de aplicação do MATLAB [M] Beijing: Electronic Industry Press, 2011.11.

Acho que você gosta

Origin blog.csdn.net/Jiangtagong/article/details/123903447
Recomendado
Clasificación