做者|Kavya Musty
編譯|Flin
來源|mediumpython
咱們常常掃描紙張把它們轉換成圖像。咱們有各類各樣的工具能夠在線加強這些圖像,使它們的亮度更亮,並消除這些圖像中的陰影。若是咱們能夠手動去除陰影呢?咱們能夠將任何圖像做爲灰度圖像加載到咱們的代碼中,並在幾秒鐘內得到輸出,而無需任何應用程序的幫助。git
這能夠經過使用基本的Numpy操做和一些open CV函數來實現。爲了解釋這個過程,咱們使用了下面的圖片,它是用手機拍的。github
很明顯,有一個陰影須要刪除。讓咱們開始吧。算法
import cv2 import numpy as np import matplotlib.pyplot as plt
那麼,最大值濾波和最小值濾波究竟是什麼?數組
讓咱們在代碼中實現這個概念。機器學習
def max_filtering(N, I_temp): wall = np.full((I_temp.shape[0]+(N//2)*2, I_temp.shape[1]+(N//2)*2), -1) wall[(N//2):wall.shape[0]-(N//2), (N//2):wall.shape[1]-(N//2)] = I_temp.copy() temp = np.full((I_temp.shape[0]+(N//2)*2, I_temp.shape[1]+(N//2)*2), -1) for y in range(0,wall.shape[0]): for x in range(0,wall.shape[1]): if wall[y,x]!=-1: window = wall[y-(N//2):y+(N//2)+1,x-(N//2):x+(N//2)+1] num = np.amax(window) temp[y,x] = num A = temp[(N//2):wall.shape[0]-(N//2), (N//2):wall.shape[1]-(N//2)].copy() return A
讓咱們對該函數進行編碼。函數
def min_filtering(N, A): wall_min = np.full((A.shape[0]+(N//2)*2, A.shape[1]+(N//2)*2), 300) wall_min[(N//2):wall_min.shape[0]-(N//2), (N//2):wall_min.shape[1]-(N//2)] = A.copy() temp_min = np.full((A.shape[0]+(N//2)*2, A.shape[1]+(N//2)*2), 300) for y in range(0,wall_min.shape[0]): for x in range(0,wall_min.shape[1]): if wall_min[y,x]!=300: window_min = wall_min[y-(N//2):y+(N//2)+1,x-(N//2):x+(N//2)+1] num_min = np.amin(window_min) temp_min[y,x] = num_min B = temp_min[(N//2):wall_min.shape[0]-(N//2), (N//2):wall_min.shape[1]-(N//2)].copy() return B
#B is the filtered image and I is the original image def background_subtraction(I, B): O = I - B norm_img = cv2.normalize(O, None, 0,255, norm_type=cv2.NORM_MINMAX) return norm_img
輸出圖像是原始圖像加強後的結果。所實現的代碼是在open CV中手動實現一些庫函數以加強圖像的拙劣嘗試。帶有圖像的整個notebook能夠在下面的Github連接中找到。工具
原文連接:https://medium.com/swlh/enhan...學習
歡迎關注磐創AI博客站:
http://panchuang.net/測試
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/