2016-08-08 2 views
9

나는 번호판 인식을하고있는 중이 야를 필터링 할 수 있습니다. 나는 판을 자르지 만 그것은 매우 흐리게입니다. 따라서 숫자/문자를 분리하여 인식 할 수는 없습니다. 내가 scikit 이미지 기능을 사용을 통해 노이즈 제거가에 시도노이즈 제거 및 이미지

enter image description here

:

여기 내 이미지입니다.

첫째, 가져 오기 라이브러리 :

: 다음

import cv2 
from skimage import restoration 
from skimage.filters import threshold_otsu, rank 
from skimage.morphology import closing, square, disk 

, 나는 내가 하려고

image = cv2.imread("plate.jpg") 
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

소음을 제거 이미지를 읽고 그레이 스케일로 변환

denoise = restoration.denoise_tv_chambolle(image , weight=0.1) thresh = threshold_otsu(denoise) bw = closing(denoise > thresh, square(2)) 

무엇 내가 가지고 있습니다 :

enter image description here

당신이 볼 수 있듯이, 모든 숫자가 함께 혼합 이다. 따라서, 나는 를 구분하고 문자 하나 하나를 인식 할 수 없습니다.

같은 것을 (나는 그것을 그릴) 내가 기대입니다 : 내가 더 나은 이미지를 필터링 할 수있는 방법을 도움을 찾고

enter image description here

은? 고맙습니다.

============================================== ======================= UPDATE :

skimage.morphology.erosion을 사용한 후, 내가 가진 :

enter image description here

+0

큰 덩어리의 블러를 이용하여 커다란 커널로'오픈 '을 시도 할 수 있습니다. 당신이 얻은 결과를 알려주세요 .. –

+0

"큰 커널에서 열어보기"라는 뜻은 – VICTOR

+0

입니다. 형태학적인 작동 즉, '침식'과 '확장'을 의미합니다. 대형 커널로 ​​시도하고 다른 크기로 실험 해보십시오. –

답변

1

result using ChanVeseBinarize with binarized kernel

ChanVeseBinarize 나에게이 결과를 주었다. 이것은 4,8,1 및 2를 강조하는 데 도움이됩니다. 각 문자와 별도의 회선을 수행해야하며 컨볼 루션의 피크가 임계 값보다 높으면 피크의 위치에 문자가 있다고 가정 할 수 있습니다 . 왜곡을 처리하려면 주어진 문자의 글꼴 유형이 거의 다른 회선을 사용해야합니다.

enter image description here

유도체 필터 및 가우시안 평활화 좀을 사용하는 다른 잠재적 인 개선. K & X는 이전 솔루션만큼 왜곡되지 않았습니다.

+0

답장을 보내 주셔서 감사합니다. 어떤 Python 라이브러리에'ChanVeseBinarize' 함수가 있습니까? – VICTOR

+1

저는 직접 구현 된 mathematica를 사용했습니다 ... 파이썬에서 찾을 수있는 옷장은 https://github.com/kevin-keraudren/chanvese....입니다. 더 나은 해결책이 조금 있지만, 그 후에 게시 할 것입니다. 더 결정적. – Pal

6

첫째, 이 이미지는 noize보다 흐림에 의해 더 손상된 것으로 보이므로이를 제거 할 좋은 이유가 없으므로 대신 이미지를 흐리게 해보십시오.

간단한을

인버스 필터링 또는 위너 필터링 될 것이다. 그런 다음 예를 들어 유역 알고리즘을 사용하여 광도 수준에 따라 글자에서 이미지의 배경을 분리해야합니다. 그렇다면 신경망에 기반한 분류 자 ​​중 하나를 통과해야하는 별도의 글자를 얻을 수 있습니다 (단순한 피드 - 포워드 그물도 괜찮습니다).

그리고 당신은 마지막으로 텍스트 표현을 얻을 수 있습니다. 그것이 그러한 인식이 일반적으로 이루어지는 방식입니다. 좋은 설명이 있으시면 book by Gonzalez&Woods이 있습니다.

7

나는 입력 이미지 품질을 최적화하려고해야한다는 견해에 동의한다.

번호판 흐림은 모션 블러의 일반적인 예입니다. 흐리게 처리 할 수있는 정도는 흐림 반경의 크기에 따라 다릅니다. 일반적으로 차량 속도가 빠르면 흐림 반경이 더 커지므로 복원하기가 더 어렵습니다.

다소 효과가있는 간단한 솔루션은 이미지의 디인터레이싱입니다. 그것은 단지 약간 더 읽을하여 입력 이미지보다 것을

enter image description here

참고. 여기에 나는 모든 다른 라인을 떨어 PIL/베개를 사용하여 절반 크기로 이미지 크기를 조정할 이것은 내가 무엇을 얻을 있습니다 :

from PIL import Image 
img=Image.open("license.jpeg") 
size=list(img.size) 
size[0] /= 2 
size[1] /= 2 
smaller_image=img.resize(size, Image.NEAREST) 
smaller_image.save("smaller_image.png") 

다음과 형식적인 접근 방식은 디컨 볼 루션입니다.

이미지의 컨볼 루션 (convolution)을 사용하여 흐림 효과를 얻으므로 흐림 제거는 이미지의 컨벌루션 또는 디콘 볼 루션의 역함을 수행해야합니다. 위너 디콘 볼 루션 (deconvolution), 리차드슨 루시 (Richardson-Lucy) 방법, 라돈 변환 및 몇 가지 유형의 베이지안 필터링과 같은 다양한 종류의 디컨 볼 루션 알고리즘이 있습니다.

code을 사용하여 위너 디콘 볼 루션 알고리즘을 적용 할 수 있습니다. 각도, 직경 및 신호 대 잡음비로 연주하고 개선점이 있는지 확인하십시오.

skimage.restoration 모듈은 또한 unsupervised_wienerrichardson_lucy deconvolution의 구현을 제공합니다.

아래 코드에서 두 구현을 모두 보여 주었지만 어느 것이 더 적합한 지 psf를 수정해야합니다.

import numpy as np 
import matplotlib.pyplot as plt 
import cv2 
from skimage import color, data, restoration 
from scipy.signal import convolve2d as conv2 

img = cv2.imread('license.jpg') 
licence_grey_scale = color.rgb2gray(img) 

psf = np.ones((5, 5))/25 

# comment/uncomment next two lines one by one to see unsupervised_wiener and richardson_lucy deconvolution 
deconvolved, _ = restoration.unsupervised_wiener(licence_grey_scale, psf) 
deconvolved = restoration.richardson_lucy(licence_grey_scale, psf) 

fig, ax = plt.subplots() 
plt.gray() 
ax.imshow(deconvolved) 
ax.axis('off') 
plt.show() 

은 불행하게도 이러한 디컨 볼 루션 alogirthms의 대부분은 사전에 (포인트 확산 기능 일명 PSF 일명)을 블러 커널을 알고 있어야합니다.

여기서는 PSF를 모르기 때문에 맹목적인 디콘 볼 루션을 사용해야합니다. 블라인드 디콘 볼 루션은 블러 커널에 대한 지식없이 원본 이미지를 추정하려고 시도합니다.

내가 여기 당신의 이미지와 함께이 시도하지만하지 않은 블라인드 디컨 볼 루션 알고리즘의 파이썬 구현 : 효과적인 범용 블라인드 디컨 볼 루션 알고리즘이 아직 발견되지 않았 음을 https://github.com/alexis-mignon/pydeconv

주 및 연구의 활동 분야이다 . 이진화 된 커널 강화 된 이미지와