簡體   English   中英

如何去除圖像 OpenCV、Python 中的噪聲?

[英]How to remove noise in image OpenCV, Python?

我有一些裁剪的圖像,我需要在白色背景上有黑色文本的圖像。 首先我應用自適應閾值,然后我嘗試去除噪聲。 雖然我嘗試了很多去噪技術,但是當圖像發生變化時,我使用的技術失敗了。

在此處輸入圖像描述

為我的圖像將圖像顏色轉換為二進制的最佳方法是自適應高斯閾值。 這是我的代碼:

im_gray = cv2.imread("image.jpg",  cv2.IMREAD_GRAYSCALE)
image = cv2.GaussianBlur(im_gray, (5,5), 1)
th =  cv2.adaptiveThreshold(image,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,3,2)

在此處輸入圖像描述

我需要平滑值、小數分隔符(點)和后綴字母。 我怎樣才能做到這一點?

在二值化之前,需要對背景的不均勻照明進行校正。 例如,像這樣:

import cv2

image = cv2.imread('9qBsB.jpg')
image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
se=cv2.getStructuringElement(cv2.MORPH_RECT , (8,8))
bg=cv2.morphologyEx(image, cv2.MORPH_DILATE, se)
out_gray=cv2.divide(image, bg, scale=255)
out_binary=cv2.threshold(out_gray, 0, 255, cv2.THRESH_OTSU )[1] 

cv2.imshow('binary', out_binary)  
cv2.imwrite('binary.png',out_binary)

cv2.imshow('gray', out_gray)  
cv2.imwrite('gray.png',out_gray)

結果: 在此處輸入圖像描述 在此處輸入圖像描述

我假設您正在為 OCR(光學字符識別)預處理圖像

我有一個檢測車牌的項目,這些是我所做的步驟,您可以將它們應用到您的項目中。 將圖像變灰后,嘗試對圖像應用均衡直方圖,這允許圖像中對比度較低的區域獲得更高的對比度。 然后模糊圖像以減少背景中的噪點。 接下來在圖像上應用邊緣檢測,確保噪聲被充分去除,因為 ED 很容易受到它的影響。 最后,在圖像上應用關閉(先膨脹然后腐蝕)以關閉單詞內的所有小孔。

你可以檢查這個,而不是侵蝕和擴張,這基本上是合二為一的。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,2))
morphology_img = cv2.morphologyEx(img_grey, cv2.MORPH_OPEN, kernel,iterations=1)
plt.imshow(morphology_img,'Greys_r')

MORPHOLOGICAL_TRANSFORMATIONS

在 Python/OpenCV 中使用除法標准化可以做得更好。

輸入:

在此處輸入圖像描述

import cv2
import numpy as np

# load image
img = cv2.imread("license_plate.jpg")

# convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# blur
blur = cv2.GaussianBlur(gray, (0,0), sigmaX=33, sigmaY=33)

# divide
divide = cv2.divide(gray, blur, scale=255)

# otsu threshold
thresh = cv2.threshold(divide, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

# apply morphology
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# write result to disk
cv2.imwrite("hebrew_text_division.jpg", divide)
cv2.imwrite("hebrew_text_division_threshold.jpg", thresh)
cv2.imwrite("hebrew_text_division_morph.jpg", morph)

# display it
cv2.imshow("gray", gray)
cv2.imshow("divide", divide)
cv2.imshow("thresh", thresh)
cv2.imshow("morph", morph)
cv2.waitKey(0)
cv2.destroyAllWindows()

分區圖片:

在此處輸入圖像描述

閾值圖像:

在此處輸入圖像描述

形態清潔圖像:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM