TensorFlow進行簡單的影像處理
TensorFlow進行簡單的影像處理
TensorFlow進行簡單的影像處理 簡單概述
作為計算機視覺開發者,使用TensorFlow進行簡單的影像處理是基本技能,而TensorFlow在tf.image包中支援對影像的常見的操作包括:
- 亮度調整
- 對比度調整
- 飽和度調整
- 影像取樣插值放縮
- 色彩空間轉換
- Gamma校正
- 標準化
影像的讀入與顯示我們通過OpenCV來實現,這裡需要注意一點,OpenCV中影像三個通道是BGR,如果你是通過tensorflow讀取的話三個通過順序是RGB。影像讀取的程式碼如下:
1.opencv方式
- src = cv.imread("D:/vcprojects/images/meinv.png")
2.tensorflow方式
- jpg = tf.read_file("D:/vcprojects/images/yuan_test.png")
- img = tf.image.decode_jpeg(jpg, channels=3)
3.使用OpenCV顯示影像
- def show_image(image, title='input'):
- print("result : n", image)
- cv.namedWindow(title, cv.WINDOW_AUTOSIZE)
- cv.imshow(title, image)
- cv.waitKey(0)
- cv.destroyAllWindows()
原圖顯示如下:
1.放縮影像
支援三種方式,分別是臨界點插值、雙線性插值與雙立方插值,不過我發現在使用雙立方插值的時候,tensorflow處理之後影像總是會出現一些噪點,這個算不算它的BUG
- tf.image.resize_nearest_neighbor # 臨界點插值
- tf.image.resize_bilinear # 雙線性插值
- tf.image.resize_bicubic # 雙立方插值演算法
演示程式碼如下:
- src = cv.imread("D:/vcprojects/images/meinv.png")
- cv.imshow("input", src)
- h, w, depth = src.shape
- src = np.expand_dims(src, 0)
- print(src.shape)
- bi_image = tf.image.resize_bilinear(src, size=[h*2, w*2])
- bi_image = tf.squeeze(bi_image)
- bi_result = sess.run(bi_image)
- bi_result = np.uint8(bi_result)
- show_image(bi_result,"bilinear-zoom")
顯示影像如下:
2.影像亮度調整
影像亮度是影像基本屬性之一,tensorflow支援兩種方式API對影像亮度進行調整
- tf.image.adjust_brightness
- tf.image.random_brightness
使用上述API的時候需要對影像進行維度新增為四維的tensor資料,完整的影像亮度調整的程式碼如下:
- src = cv.imread("D:/vcprojects/images/meinv.png")
- src = np.expand_dims(src, 0)
- brightness = tf.image.adjust_brightness(src, delta=.5)
- brightness = tf.squeeze(brightness)
- result = sess.run(brightness)
- result = np.uint8(result)
- show_image(result, "brightness demo")
顯示影像如下:
3.影像對比度調整
影像對比度是影像基本屬性之一,tensorflow支援兩種方式API對影像對比度進行調整
- tf.image.adjust_contrast
- tf.image.random_contrast
前面一種全域性調整,後面一種方式是隨機調整,對比度調整的程式碼演示如下:
- src = cv.imread("D:/vcprojects/images/meinv.png")
- src = np.expand_dims(src, 0)
- contrast = tf.image.adjust_contrast(src, contrast_factor=2.2)
- contrast = tf.squeeze(contrast)
- result = sess.run(contrast)
- result = np.uint8(result)
- show_image(result, "contrast demo")
顯示影像如下:
4.影像gamma校正
伽瑪校正就是對影像的伽瑪曲線進行編輯,以對影像進行非線性色調編輯的方法,檢出影像訊號中的深色部分和淺色部分,並使兩者比例增大,從而提高影像的對比度。相關API為:
- tf.image.adjust_gamma
常見gamma的取值範圍為0.05~5之間,tensorflow實現gamma校正的程式碼演示如下:
- src = cv.imread("D:/vcprojects/images/meinv.png")
- src = np.expand_dims(src, 0)
- contrast = tf.image.adjust_gamma(src, gain=1.0, gamma=4.2)
- contrast = tf.squeeze(contrast)
- result = sess.run(contrast)
- result = np.uint8(result)
- show_image(result, "gamma demo")
顯示影像如下:
5.影像飽和度調整
影像飽和度是影像HSV色彩空間最常見的指標之一,通過調整影像飽和度可以得到更加自然光澤的影像,tensorflow中飽和度調整的API如下:
- tf.image.adjust_saturation
常見的飽和度調整範圍在0~5之間取值即可,演示程式碼如下:
- src = cv.imread("D:/vcprojects/images/meinv.png")
- contrast = tf.image.adjust_saturation(src, saturation_factor=2.2)
- result = sess.run(contrast)
- result = np.uint8(result)
- show_image(result, "saturation demo")
這裡要特別說明一下,飽和度調整不支援4D tensor物件,所以讀入的RGB影像即可。無需再次進行維度增加操作。最終調整之後的演示影像如下:
6.影像標準化
這個在tensorflow中對影像資料訓練之前,經常會進行此步操作,它跟歸一化是有區別的。歸一化的影像直方圖不會改變,標準化會改變影像直方圖分佈,標準化API如下:
- tf.image.per_image_standardization
影像標準化實現程式碼如下:
- src = cv.imread("D:/vcprojects/images/meinv.png")
- contrast = tf.image.per_image_standardization(src)
- result = sess.run(contrast)
- result = np.uint8(result)
- show_image(result, "standardization demo")
演示結果如下:
7.影像色彩空間轉換 tensorflow支援常見影像色彩空間轉換,包括RGB、HSV、灰度色彩空間,相關API如下:
- tf.image.rgb_ to_hsv
- tf.image.rgb_ to_grayscale
- tf.image.hsv_ to_rgb
將影像從RGB色彩空間轉換到灰度空間的程式碼演示如下:
- src = cv.imread("D:/vcprojects/images/meinv.png")
- gray = tf.image.rgb_to_grayscale(src)
- result = sess.run(gray)
- result = np.uint8(result)
- show_image(result, "gray - demo")
結果顯示如下:
相關文章
- 基於Opencv的簡單影像處理OpenCV
- 使用python進行簡單的媒體處理Python
- 圖形影像處理之簡單圖片
- 使用matlab對影像進行二值化處理Matlab
- Caffe簡單例程,影像處理,Netscope視覺化方法單例視覺化
- 影像行畫素處理
- 簡單的字串處理字串
- pythonPIL影像處理庫簡介(一)Python
- 利用opencv進行簡易的拍照並處理照片OpenCV
- 簡單的方法就能教你實現將大量的影片批次進行分割的處理
- 如何使用卷積神經網路進行影像處理?卷積神經網路
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- 使用 Google Cloud 上的 tf.Transform 對 TensorFlow 管道模式進行預處理GoCloudORM模式
- 影像處理--影像特效特效
- EXCEL的重生!處理百萬行資料竟如此簡單Excel
- Python影像處理丨5種影像處理特效Python特效
- webgl 影像處理2---影像畫素處理Web
- Python 影像處理 OpenCV (7):影像平滑(濾波)處理PythonOpenCV
- Java的簡單理解(22)---處理流Java
- android簡單的圖形特效處理Android特效
- 影像預處理
- 簡單實現批處理
- 如何基於香橙派AIpro對影片/影像資料進行預處理AI
- 使用 Python+spaCy 進行簡易自然語言處理Python自然語言處理
- openCV中的影像處理 3 影像閾值OpenCV
- iOS換膚功能的簡單處理框架iOS框架
- 包含(處理)HTML的最簡單方法包括HTML
- halcon的頻域影像處理
- 影象處理庫GPUImage簡單使用GPUUI
- 影像處理_切邊
- 前端影像處理指南前端
- 影像預處理方法
- OpenCV(影像NaN處理)OpenCVNaN
- 影像處理案例03
- 影像輪廓處理
- 使用Lambda表示式處理簡單的業務
- 簡單的全域性異常統一處理
- Rust中錯誤處理的最簡單指南Rust