當前位置: 華文星空 > 新聞

Matlab影像處理——藍色車牌的提取

2024-01-30新聞

Matlab影像處理——藍色車牌的提取 (qq.com)

在現代社會中,車牌辨識已經成為交通管理和安全監控中一個重要的工具。車牌提取是車牌辨識中的一個關鍵步驟,透過提取車牌可以去除非車牌區域帶來的幹擾,從而更加快速準確的辨識車牌。這篇文章將介紹如何使用Matlab來提取藍色車牌。

1. 車牌顏色提取原理車牌區域具有明顯的特點,因此根據車牌底色、字色等有關知識,可采用彩色像素點統計的方法分割出合理的車牌區域。本案例以藍底白字的普通車牌為例說明彩色像素點統計的分割方法,假設經網路攝影機拍攝采集得到了包含車牌的 RGB 彩色影像,水平方向記為y,垂直方向記為x。首先,確定車牌底色 RGB 各分量分別對應的顏色範圍;其次,在y方向統計此顏色範圍內的像素點數量,設定合理的閾值,確定車牌在 y方向的合理區域。然後,在分割出的y方向區域內統計X方向此顏色範圍內的像素點數量,設定合理的閾值進行定位。最後,根據x、y方向的範圍來確定車牌區域,實作定位。2. Matlab程式碼實作

clear clc I = imread('1.jpg'); %% 根據影像寬度設定處理參數,對應藍色區域 if size(I, 2) > 900 parm = [0.35 0.9 90 0.35 0.7 90 2]; end if size(I, 2) > 700 && size(I, 2) < 900 parm = [0.6 0.9 90 0.6 0.8 90 0.5]; end if size(I, 2) > 500 && size(I, 2) < 700 parm = [0.5 0.54 50 0.6 0.7 50 3]; end if size(I, 2) < 500 parm = [0.8 0.9 150 0.8 0.9 150 3]; end %% 行(Y)過濾結果 [y, x, z] = size(I); %讀取yxz三個方向的深度 myI = double(I); Blue_y = zeros(y, 1); %for迴圈對滿足條件的像素點的行對應的個數進行統計 for i = 1 : y for j = 1 : x rij = myI(i, j, 1)/(myI(i, j, 3)+eps); gij = myI(i, j, 2)/(myI(i, j, 3)+eps); bij = myI(i, j, 3); %藍色RGB的灰度範圍 if (rij < parm(1) && gij < parm(2) && bij > parm(3)) ... || (gij < parm(1) && rij < parm(2) && bij > parm(3)) Blue_y(i, 1) = Blue_y(i, 1) + 1; %藍色像素點統計 end end end %Y方向車牌區域確定 [~, MaxY] = max(Blue_y); Th = parm(7); %向上追溯,直到車牌區域上邊界 PY1 = MaxY; while ((Blue_y(PY1,1)>Th) && (PY1>1)) PY1 = PY1 - 1; end %向下追溯,直到車牌區域下邊界 PY2 = MaxY; while ((Blue_y(PY2,1)>Th) && (PY2<y)) PY2 = PY2 + 1; end %對車牌區域進行修正 PY1 = PY1 - 2; PY2 = PY2 + 2; if PY1 < 1 PY1 = 1; end if PY2 > y PY2 = y; end IY = I(PY1:PY2, :, :); %車牌區域 figure imshow(IY); title('行過濾結果', 'FontWeight', 'Bold'); %% 列(X)過濾結果 Blue_x = zeros(1,x); for j = 1:x for i = PY1:PY2 rij = myI(i, j, 1)/(myI(i, j, 3)+eps); gij = myI(i, j, 2)/(myI(i, j, 3)+eps); bij = myI(i, j, 3); %藍色RGB的灰度範圍 if (rij < parm(4) && gij < parm(5) && bij > parm(6)) ... || (gij < parm(4) && rij < parm(5) && bij > parm(6)) Blue_x(1,j) = Blue_x(1,j) + 1; end end end %向右追溯,直到車牌區域左邊界 PX1 = 1; while (Blue_x(1,PX1)<Th) && (PX1<x) PX1 = PX1 + 1; end %向左追溯,直到車牌區域右邊界 PX2 = x; while (Blue_x(1,PX2)<Th) && (PX2>PX1) PX2 = PX2 - 1; end %對車牌區域進行修正 PX1 = PX1 - 2; PX2 = PX2 + 2; if PX1 < 1 PX1 = 1; end if PX2 > x PX2 = x; end %得到車牌區域 IX = I(:, PX1:PX2, :); figure imshow(IX); title('列過濾結果', 'FontWeight', 'Bold'); %% Plate = I(PY1:PY2, PX1:PX2, :); Loc.row = [PY1 PY2]; Loc.col = [PX1 PX2]; %% figure; imshow(I); title('原影像', 'FontWeight', 'Bold'); hold on; row = Loc.row; col = Loc.col; plot([col(1) col(2)], [row(1) row(1)], 'r-', 'LineWidth', 3); plot([col(1) col(2)], [row(2) row(2)], 'r-', 'LineWidth', 3); plot([col(1) col(1)], [row(1) row(2)], 'r-', 'LineWidth', 3); plot([col(2) col(2)], [row(1) row(2)], 'r-', 'LineWidth', 3); hold off; figure imshow(Plate); title('分割結果', 'FontWeight', 'Bold');

3、執行結果

4. 總結

本文介紹了如何使用Matlab來提取藍色車牌。透過設定閾值,我們可以快速、簡單地實作車牌顏色的提取。這對於車牌辨識等套用具有重要意義。需要註意的是,在實際套用中,由於光照、車速等因素的幹擾,車牌的影像可能存在一定的形變、旋轉等問題,因此需要進行影像校正和處理,以保證分割的準確性和穩定性。關於影像校正可參考下面的文章:Matlab影像處理——文件影像傾斜角檢測及校正

小英熊學長會非週期性釋出相關設計內容包括但不限於如下內容:訊號處理、通訊仿真、演算法設計、matlab appdesigner,gui設計、simulink仿真......希望能幫到你!有任何matlab和python相關的問題都可以在後台滴滴小英熊學長歐~