基于OpenCV的圖像強度操作
點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達

更改任何通道中的像素值
對圖像的數(shù)學(xué)運算
亮度變化
對比度變化
伽瑪操縱
直方圖均衡
圖像預(yù)處理中的濾波等增強
使用OpenCV加載圖像
import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0);plt.imshow(img, cmap = "gray");plt.show()
使用Opencv向輸入圖像添加常數(shù)
img = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0);##########################FOCUS############################img = cv2.add(img, 120);###########################################################plt.imshow(img, cmap = "gray");plt.show()
使用Opencv減去常數(shù)以輸入圖像
img = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0);##########################FOCUS############################img = cv2.subtract(img, 120);####################################################################plt.imshow(img, cmap = "gray");plt.show()
方法1
將圖像拆分為其通道。
對于每個通道,計算其平均值。
從該通道中的每個像素中減去均值
方法2(用于深度學(xué)習(xí))
將所有圖像分割成各自的通道,對于所有圖像的每個通道:
為每個圖像找到該通道的均值。
查找所有計算出的均值的均值。
應(yīng)用領(lǐng)域1:批標準化的一部分
# Grayscale imageimport numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0); # read the image as grayscale# cv2.subtractmean = np.mean(img);img_out = cv2.subtract(img, mean);f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img, cmap = "gray");f.add_subplot(1, 2, 2).set_title('Mean subtracted image');plt.imshow(img_out, cmap = "gray");plt.show()
應(yīng)用領(lǐng)域1:負片
灰度負片
# negative of grayscaleimport numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0); # read the image as grayscale#cv2.subtractimg_out = cv2.subtract(255, img);f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img, cmap = "gray");f.add_subplot(1, 2, 2).set_title('Negative image');plt.imshow(img_out, cmap = "gray");plt.show()

RGB圖像負片
# negative of rgb imagesimport numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/castle.png", -1);img_out = 255 - img;f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img[:,:,::-1]);f.add_subplot(1, 2, 2).set_title('Negative image');plt.imshow(img_out[:,:,::-1]);plt.show()

直接融合
# Direct addingimport numpy as npimport cv2from matplotlib import pyplot as pltimg1 = cv2.imread(folder_path + "imgs/chapter3/castle.png", -1);img1 = cv2.resize(img1, (256, 256));img2 = cv2.imread(folder_path + "imgs/chapter3/tessellate.jpg", -1);img2 = cv2.resize(img2, (256, 256));img_out = cv2.add(img1, img2);f = plt.figure(figsize=(8,8))plt.imshow(img_out[:,:,::-1]);plt.show()

加權(quán)融合
# cv2.addWeightedimport numpy as npimport cv2from matplotlib import pyplot as pltimg1 = cv2.imread(folder_path + "imgs/chapter3/castle.png", -1);img1 = cv2.resize(img1, (256, 256));img2 = cv2.imread(folder_path + "imgs/chapter3/tessellate.jpg", -1);img2 = cv2.resize(img2, (256, 256));# Like a faint watermarkimg_out = cv2.addWeighted(img1,0.7,img2,0.3,0);f = plt.figure(figsize=(8,8))plt.imshow(img_out[:,:,::-1]);plt.show()
import numpy as npimport cv2from matplotlib import pyplot as pltimg1 = cv2.imread(folder_path + "imgs/chapter3/background.png", -1);img2 = cv2.imread(folder_path + "imgs/chapter3/foreground.png", -1);img_out = cv2.subtract(img2, img1);f = plt.figure(figsize=(15,10))f.add_subplot(2, 2, 1).set_title('Background Image');plt.imshow(img1[:, :, ::-1])f.add_subplot(2, 2, 2).set_title('Background image with some object');plt.imshow(img2[:, :, ::-1])f.add_subplot(2, 2, 3).set_title('Subtracted image');plt.imshow(img_out[:, :, ::-1])plt.show()

發(fā)光或反射光的質(zhì)量或狀態(tài)
亮度是一個相對術(shù)語。這取決于您的視覺感知。
亮度可以定義為光源相對于我們所比較的光源輸出的能量。
import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + 'imgs/chapter3/outdoor.jpg')value = 100 #Increase or decrease brightness by this valuehsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)hsv[:,:,2] = cv2.add(hsv[:,:,2], value)img_out = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img[:, :, ::-1])f.add_subplot(1, 2, 2).set_title('Brightness manipulated image');plt.imshow(img_out[:, :, ::-1])plt.show()

對比度是使對象(或其在圖像或顯示器中的表示形式)與眾不同的亮度或顏色差異。
可視化為圖像中最大和最小像素強度之間的差異。
對比度由同一視野內(nèi)物體的顏色和亮度差異決定。
from PIL import Image, ImageEnhancefrom matplotlib import pyplot as pltimg = Image.open(folder_path + "imgs/chapter3/outdoor.jpg");enhancer = ImageEnhance.Contrast(img)out = enhancer.enhance(factor=1.25)f = plt.figure(figsize=(15,15))f.add_subplot(2, 1, 1).set_title('Original Image');plt.imshow(img)f.add_subplot(2, 1, 2).set_title('Contrast manipulated image');plt.imshow(out)plt.show()


伽瑪校正是一種用于對亮度進行編碼和解碼的非線性操作。
所有彩色和灰度數(shù)字圖像文件都包含伽瑪數(shù)據(jù)。
Gamma涉及在數(shù)字靈敏度和人眼靈敏度之間進行轉(zhuǎn)換,一方面提供了許多優(yōu)勢,另一方面卻增加了復(fù)雜性。
伽瑪可優(yōu)化中間調(diào)的對比度和亮度。
import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + 'imgs/chapter3/indoor.jpg')# Apply Gamma=2.2 on the normalised image and then multiply by scaling constant (For 8 bit, c=255)# Normalize image, pixels to 0-1# Multiple by gamma# Re-factor the image pixels to have value from 0-255img_out = np.array(255*(img/255)**2.2,dtype='uint8')f = plt.figure(figsize=(15,15))f.add_subplot(2, 1, 1).set_title('Original Image');plt.imshow(img[:, :, ::-1])f.add_subplot(2, 1, 2).set_title('Gamma manipulated image');plt.imshow(img_out[:, :, ::-1])plt.show()

直方圖
直方圖顯示事物發(fā)生頻率的圖表。
圖像像素直方圖表示具有特定強度值的像素的頻率。

直方圖均衡
直方圖均衡用于增強對比度。
此方法增加了圖像的整體對比度。

import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/outdoor.jpg", 0)# Ravel falttens the 2d array to 1d array# 256 - total number of binsplt.hist(img.ravel(),256,[0,256])plt.title("Histogram for original image")plt.show()
import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/outdoor.jpg", 0)# cv2.equalizeHistimg_out = cv2.equalizeHist(img)f = plt.figure(figsize=(15,15))f.add_subplot(2, 1, 1).set_title('Original Image');plt.imshow(img, cmap="gray")f.add_subplot(2, 1, 2).set_title('Histogram equalized image');plt.imshow(img_out, cmap="gray")plt.show()

代碼鏈接:https://github.com/Tessellate-Imaging/monk_v1/blob/master/study_roadmaps/3_image_processing_deep_learning_roadmap/1_image_processing_basics/3) Image Intensity manipulation.ipynb
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

