Python圖像增強(qiáng)imgaug詳解
介紹
圖像分類器通常在訓(xùn)練更多的圖像時(shí)表現(xiàn)得更好。在圖像分類模型中,一個(gè)常見(jiàn)的問(wèn)題是,模型不能正確地對(duì)圖像進(jìn)行分類,只是因?yàn)樗鼪](méi)有針對(duì)同一圖像的不同方向進(jìn)行訓(xùn)練。這可以通過(guò)向模型提供多種可能的圖像方向和轉(zhuǎn)換來(lái)克服。
然而,在現(xiàn)實(shí)中,收集這些不同的數(shù)據(jù)可能需要更多的時(shí)間、資源和專業(yè)知識(shí),而且對(duì)公司來(lái)說(shuō)成本可能很高。在這種情況下,圖像數(shù)據(jù)增強(qiáng)是一個(gè)流行的選擇,通過(guò)使用一個(gè)或多個(gè)增強(qiáng)技術(shù)來(lái)生成用于訓(xùn)練的各種圖像,從而為現(xiàn)有數(shù)據(jù)集增加多樣性。
盡管一些Python庫(kù)支持多種增強(qiáng)技術(shù),但并不是所有的技術(shù)都適合訓(xùn)練模型。用戶需要知道哪些增強(qiáng)技術(shù)可以幫助生成用于訓(xùn)練模型的實(shí)際附加數(shù)據(jù)。
可以使用各種技術(shù)來(lái)增強(qiáng)圖像數(shù)據(jù)。它可以包括:
- 使用幾何變換(例如翻轉(zhuǎn)、裁剪、旋轉(zhuǎn)、縮放等)增強(qiáng)圖像數(shù)據(jù)。
- 通過(guò)使用顏色轉(zhuǎn)換來(lái)增強(qiáng)圖像數(shù)據(jù),例如通過(guò)調(diào)整亮度、暗度、銳度、飽和度等。
- 通過(guò)隨機(jī)擦除、混合圖像等來(lái)增強(qiáng)圖像數(shù)據(jù)。
Imgaug
Imgaug 是一個(gè)開(kāi)源 python 包,可讓你在機(jī)器學(xué)習(xí)實(shí)驗(yàn)中增強(qiáng)圖像。它適用于各種增強(qiáng)技術(shù)。它有一個(gè)簡(jiǎn)單而強(qiáng)大的界面,可以增強(qiáng)圖像、地標(biāo)、邊界框、熱圖和分割圖。
首先使用 pip 安裝這個(gè)庫(kù)。
pip install imgaug
接下來(lái),使用 pip 命令在命令提示符下安裝名為“IPyPlot”的 python 包:
pip install ipyplot
IPyPlot 是一個(gè) Python 工具,允許在 Python Notebook 單元格中快速高效地顯示圖像。這個(gè)包將 IPython 與 HTML 相結(jié)合,以提供一種更快、更豐富、更具交互性的方式來(lái)顯示圖像。這個(gè)包的 'plot_images' 命令將用于以網(wǎng)格狀結(jié)構(gòu)繪制所有圖像。
此外,將導(dǎo)入擴(kuò)充數(shù)據(jù)所需的所有必要包。
import imageio import imgaug as ia import imgaug.augmenters as iaa 增強(qiáng)的圖像路徑在此處定義。將使用鳥(niǎo)類圖像作為示例。 input_img = imageio.imread('../input/image-bird/bird.jpg')
圖像翻轉(zhuǎn)
可以使用下面的命令水平和垂直翻轉(zhuǎn)圖像。以下代碼中的“Fliplr”關(guān)鍵字水平翻轉(zhuǎn)圖像。同樣,關(guān)鍵字“Flipud”垂直翻轉(zhuǎn)圖像。
#Horizontal Flip hflip= iaa.Fliplr(p=1.0) input_hf= hflip.augment_image(input_img) #Vertical Flip vflip= iaa.Flipud(p=1.0) input_vf= vflip.augment_image(input_img) images_list=[input_img, input_hf, input_vf] labels = ['Original', 'Horizontally flipped', 'Vertically flipped'] ipyplot.plot_images(images_list,labels=labels,img_width=180)
每個(gè)圖像被翻轉(zhuǎn)的概率由 p 表示。默認(rèn)情況下,概率設(shè)置為 0.0。要水平翻轉(zhuǎn)輸入圖像,請(qǐng)使用 Fliplr(1.0) 。同樣,當(dāng)垂直翻轉(zhuǎn)圖像時(shí),使用 Flipud(1.0) 。
圖像旋轉(zhuǎn)
通過(guò)以度為單位定義旋轉(zhuǎn),可以旋轉(zhuǎn)圖像。
rot1 = iaa.Affine(rotate=(-50,20)) input_rot1 = rot1.augment_image(input_img) images_list=[input_img, input_rot1] labels = ['Original', 'Rotated Image'] ipyplot.plot_images(images_list,labels=labels,img_width=180)
圖像裁剪
裁剪圖像包括從圖像的側(cè)面移除像素的列或行,可以從全尺寸輸入圖像中提取較小尺寸的子圖像。要?jiǎng)h除的像素?cái)?shù)可以以絕對(duì)數(shù)或圖像大小的一部分指定。
在這種情況下,使用從連續(xù)間隔 [0.0, 0.3] 中均勻獲取的隨機(jī)分?jǐn)?shù)裁剪圖像的每一側(cè),并在每個(gè)圖像和每側(cè)采樣一次。在這里,為頂部取 0.3 的采樣分?jǐn)?shù),這會(huì)將圖像裁剪 0.3*H,其中 H 是輸入圖像的高度。
crop1 = iaa.Crop(percent=(0, 0.3)) input_crop1 = crop1.augment_image(input_img) images_list=[input_img, input_crop1] labels = ['Original', 'Cropped Image'] ipyplot.plot_images(images_list,labels=labels,img_width=180)
圖像噪聲
該增強(qiáng)器將高斯噪聲添加到輸入圖像。尺度值是產(chǎn)生噪聲的正態(tài)分布的標(biāo)準(zhǔn)偏差。
noise=iaa.AdditiveGaussianNoise(10,40) input_noise=noise.augment_image(input_img) images_list=[input_img, input_noise] labels = ['Original', 'Gaussian Noise Image'] ipyplot.plot_images(images_list,labels=labels,img_width=180)
圖像剪切
該增強(qiáng)器以 -40 到 40 度范圍內(nèi)的隨機(jī)量剪切圖像。
shear = iaa.Affine(shear=(-40,40)) input_shear=shear.augment_image(input_img) images_list=[input_img, input_shear] labels = ['Original', 'Image Shearing'] ipyplot.plot_images(images_list,labels=labels,img_width=180)
圖像對(duì)比度
該增強(qiáng)器通過(guò)縮放像素值來(lái)調(diào)整圖像對(duì)比度。
contrast=iaa.GammaContrast((0.5, 2.0)) contrast_sig = iaa.SigmoidContrast(gain=(5, 10), cutoff=(0.4, 0.6)) contrast_lin = iaa.LinearContrast((0.6, 0.4)) input_contrast = contrast.augment_image(input_img) sigmoid_contrast = contrast_sig.augment_image(input_img) linear_contrast = contrast_lin.augment_image(input_img) images_list=[input_img, input_contrast,sigmoid_contrast,linear_contrast] labels = ['Original', 'Gamma Contrast','SigmoidContrast','LinearContrast'] ipyplot.plot_images(images_list,labels=labels,img_width=180)
GammaContrast 函數(shù)使用公式 255*((v/255)**gamma 調(diào)整圖像對(duì)比度,其中 v 是像素值,gamma 從范圍 [0.5, 2.0] 中均勻采樣。
SigmoidContrast 使用公式 255*1/(1+exp(gain*(cutoff-v/255)) 調(diào)整圖像對(duì)比度 (其中v為像素值,gain 從區(qū)間[3, 10]開(kāi)始均勻采樣(每張圖像一次),截?cái)嗖蓸优c區(qū)間 [0.4, 0.6] 一致。
LinearContrast 使用公式 127 + alpha*(v-127) 改變圖像對(duì)比度,其中 v 是像素值,alpha 從 [0.4, 0.6] 范圍內(nèi)均勻采樣。
圖像轉(zhuǎn)換
“ElasticTransformation”增強(qiáng)器通過(guò)使用位移場(chǎng)在局部移動(dòng)像素來(lái)變換圖像。增強(qiáng)器的參數(shù)是 alpha 和 sigma。位移的強(qiáng)度由 alpha 控制,其中較大的值表示像素移動(dòng)得更遠(yuǎn)。位移的平滑度由 sigma 控制,其中較大的值會(huì)導(dǎo)致更平滑的圖案。
elastic = iaa.ElasticTransformation(alpha=60.0, sigma=4.0) polar = iaa.WithPolarWarping(iaa.CropAndPad(percent=(-0.2, 0.7))) jigsaw = iaa.Jigsaw(nb_rows=20, nb_cols=15, max_steps=(3, 7)) input_elastic = elastic.augment_image(input_img) input_polar = polar.augment_image(input_img) input_jigsaw = jigsaw.augment_image(input_img) images_list=[input_img, input_elastic,input_polar,input_jigsaw] labels = ['Original', 'elastic','polar','jigsaw'] ipyplot.plot_images(images_list,labels=labels,img_width=180)
在使用“Polar Warping”增強(qiáng)器時(shí),首先在極坐標(biāo)表示中應(yīng)用裁剪和填充,然后再將其扭轉(zhuǎn)回笛卡爾表示。這個(gè)增強(qiáng)器可以為圖像添加額外的像素。這些將被黑色像素填充。此外,“Jigsaw”增強(qiáng)以類似于拼圖模式的方式移動(dòng)圖片內(nèi)的單元格。
圖像邊界框
Imgaug 還為圖像提供邊界框支持。如果在增強(qiáng)期間旋轉(zhuǎn),該庫(kù)可以旋轉(zhuǎn)圖像上的所有邊界框。
from imgaug.augmentables.bbs import BoundingBox, BoundingBoxesOnImage bbs = BoundingBoxesOnImage([ BoundingBox(x1=40, x2=550, y1=40, y2=780) ], shape=input_img.shape) ia.imshow(bbs.draw_on_image(input_img))
到此這篇關(guān)于Python圖像增強(qiáng)imgaug的文章就介紹到這了,更多相關(guān)Python圖像增強(qiáng)imgaug內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中socket網(wǎng)絡(luò)通信是干嘛的
在本篇文章里小編給大家分享的是關(guān)于Python中socket網(wǎng)絡(luò)通信知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以跟著學(xué)習(xí)下。2020-05-05Python 專題六 局部變量、全局變量global、導(dǎo)入模塊變量
本文主要講述python全局變量、局部變量和導(dǎo)入模塊變量的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-03-03Python學(xué)習(xí)之字典的常用方法總結(jié)
這篇文章主要為大家介紹了Python中字典的幾個(gè)常用方法總結(jié),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python字典有一定幫助,需要的可以參考一下2022-03-03Python爬蟲(chóng)DNS解析緩存方法實(shí)例分析
這篇文章主要介紹了Python爬蟲(chóng)DNS解析緩存方法,結(jié)合具體實(shí)例形式分析了Python使用socket模塊解析DNS緩存的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-06-06Python根據(jù)詞頻信息(xlsx、csv文件)繪制詞云圖全過(guò)程(wordcloud)
這篇文章主要給大家介紹了關(guān)于Python根據(jù)詞頻信息(xlsx、csv文件)繪制詞云圖的相關(guān)資料,wordcloud是基于Python開(kāi)發(fā)的詞云生成庫(kù),功能強(qiáng)大使用簡(jiǎn)單,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06Python中關(guān)于?*args與**args的用法及說(shuō)明
這篇文章主要介紹了Python中關(guān)于?*args與**args的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02開(kāi)源Web應(yīng)用框架Django圖文教程
Python下有許多款不同的 Web 框架。Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。下面我們來(lái)一步步學(xué)習(xí)下吧2017-03-03Python之lambda匿名函數(shù)及map和filter的用法
今天小編就為大家分享一篇關(guān)于Python之lambda匿名函數(shù)及map和filter的用法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03python出現(xiàn)"IndentationError: unexpected indent"錯(cuò)誤解決辦法
這篇文章主要介紹了python出現(xiàn)"IndentationError: unexpected indent"錯(cuò)誤解決辦法的相關(guān)資料,希望通過(guò)本文能解決遇到這樣的問(wèn)題,需要的朋友可以參考下2017-10-10