基于OpenCV的圖像強(qiáng)度操作
點(diǎn)擊上方“小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

更改任何通道中的像素值
對(duì)圖像的數(shù)學(xué)運(yùn)算
亮度變化
對(duì)比度變化
伽瑪操縱
直方圖均衡
圖像預(yù)處理中的濾波等增強(qiáng)
使用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
將圖像拆分為其通道。
對(duì)于每個(gè)通道,計(jì)算其平均值。
從該通道中的每個(gè)像素中減去均值
方法2(用于深度學(xué)習(xí))
將所有圖像分割成各自的通道,對(duì)于所有圖像的每個(gè)通道:
為每個(gè)圖像找到該通道的均值。
查找所有計(jì)算出的均值的均值。
應(yīng)用領(lǐng)域1:批標(biāo)準(zhǔn)化的一部分
# 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:負(fù)片
灰度負(fù)片
# 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圖像負(fù)片
# 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)
亮度是一個(gè)相對(duì)術(shù)語(yǔ)。這取決于您的視覺(jué)感知。
亮度可以定義為光源相對(duì)于我們所比較的光源輸出的能量。
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()

對(duì)比度是使對(duì)象(或其在圖像或顯示器中的表示形式)與眾不同的亮度或顏色差異。
可視化為圖像中最大和最小像素強(qiáng)度之間的差異。
對(duì)比度由同一視野內(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()


伽瑪校正是一種用于對(duì)亮度進(jìn)行編碼和解碼的非線(xiàn)性操作。
所有彩色和灰度數(shù)字圖像文件都包含伽瑪數(shù)據(jù)。
Gamma涉及在數(shù)字靈敏度和人眼靈敏度之間進(jìn)行轉(zhuǎn)換,一方面提供了許多優(yōu)勢(shì),另一方面卻增加了復(fù)雜性。
伽瑪可優(yōu)化中間調(diào)的對(duì)比度和亮度。
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ā)生頻率的圖表。
圖像像素直方圖表示具有特定強(qiáng)度值的像素的頻率。

直方圖均衡
直方圖均衡用于增強(qiáng)對(duì)比度。
此方法增加了圖像的整體對(duì)比度。

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
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~

