2014-06-10 42 views
8

我正在研究QR檢測器代碼,我需要在圖像上找到查找圖案(FP)。我創建了一個二進制模板類似於你的QR碼的拐角找到方塊:如何檢測圖像中的QR碼圖案?

FP = ones(9); 
FP(2:8,2:8)=0; 
FP(3:7,3:7)=1; 
FP(4:6,4:6)=0; 
figure;imshow(FP) 

我試圖尋找與使用xcorr2此模板最大相關圖像中的點。我的問題很明顯:與QR碼在圖像上的實際尺寸相比,我的模板非常小。

有沒有一種方法來尋找一個模式/面具,而不必調整它的大小?還有另一種解決這個問題的方法嗎?

舉個例子,這裏有一個QR碼

enter image description here

+0

你可以用QR碼發佈圖片的例子嗎?您正在使用的實際圖像掩蓋。 – kkuilla

+0

完成!我編輯了我的帖子並上傳了一張測試圖片 –

+2

一些關鍵字可能有助於:「縮放不變模板匹配」 – nkjt

回答

9

圖像使用xcorr2你不需要。您應該使用掃描線在1d中查找1:1:3:1:1(暗光 - 暗光 - 黑暗的寬度)圖案。

the standard的第60頁有對參考檢測算法的描述。

此外,ZXing是一個實現QR碼檢測/識別的開源庫。你可以閱讀他們的代碼以供參考。

編輯:在每條掃描線上,計數隨後的黑暗和隨後的亮點像素。您將得到一個表示序列長度的整數列表。

然後從最大的黑暗子序列開始,看向它的兩側。如果暗的子序列長度爲300,則其相鄰的光子序列長度應爲50-150,其相鄰的暗子序列長度也應爲50-150(這是由於標準中提出的0.5的容差)。 。

所以如果你找到這樣一個序列,你用300來標記它。然後你嘗試下一個最大的黑色子序列,等等。

只是爲了澄清,上述方法應該用來找到3個標記​​的角落。

+0

好吧我會試試這個,但是如果我正在處理像上傳的圖片怎麼辦?在這種情況下,我無法查找該模式(假設它是基於像素的),因爲序列中涉及更多的像素,對嗎? –

+0

我認爲你將不得不縮放你的模式或參考圖像。但是因爲你在1d而不是2d做這個,它會快得多。 –

+0

另外,請參閱我添加的編輯。 –