【機器學習】圖片分類中增強常用方式詳解以及效果展示

圖片增強常用方式詳解

引言

圖片數據的質量和多樣性對模型的訓練效果起著至關重要的作用。然而,實際獲取的圖片數據往往存在數量不足、分布不均衡等問題。圖片增強技術應運而生,它通過對原始圖片進行一系列變換,生成更多具有多樣性的圖片,從而提升模型的泛化能力。本文將詳細介紹幾種常見的圖片增強方式及其實現方法。

隨機旋轉(Random Rotation)

在這里插入圖片描述

原理
隨機旋轉是指在一定角度范圍內對圖片進行隨機旋轉操作。這種方式可以模擬圖片在不同角度下的拍攝情況,增加模型對不同角度物體的識別能力。

** 實現 **
在 Python 中,我們可以使用 Keras 庫的 ImageDataGenerator 來實現隨機旋轉。以下是示例代碼:

from keras.preprocessing.image import ImageDataGenerator
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt# 讀取原始圖片
image_path = "your_image.jpg"
original_image = Image.open(image_path)
original_image = np.array(original_image)# 定義 ImageDataGenerator,設置旋轉范圍為 -30° 到 30°
datagen_rotation = ImageDataGenerator(rotation_range=30)# 生成旋轉后的圖片
rotated_image = datagen_rotation.flow(np.array([original_image]), batch_size=1).next()[0].astype('uint8')# 顯示原始圖片和旋轉后的圖片
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].imshow(original_image)
axes[0].axis('off')
axes[0].set_title('原始圖片')axes[1].imshow(rotated_image)
axes[1].axis('off')
axes[1].set_title('旋轉后的圖片')
plt.show()

隨機平移(Random Shift)

在這里插入圖片描述

原理
隨機平移是在水平和垂直方向上對圖片進行隨機移動。通過這種方式,可以讓模型學習到物體在不同位置的特征,增強模型對物體位置變化的魯棒性。

實現
同樣使用 ImageDataGenerator 來實現隨機平移,示例代碼如下:


# 定義 ImageDataGenerator,設置水平方向平移范圍為 ±20% 寬度,垂直方向平移范圍為 ±15% 高度
datagen_shift = ImageDataGenerator(width_shift_range=0.2,height_shift_range=0.15
)# 生成平移后的圖片
shifted_image = datagen_shift.flow(np.array([original_image]), batch_size=1).next()[0].astype('uint8')# 顯示原始圖片和平移后的圖片
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].imshow(original_image)
axes[0].axis('off')
axes[0].set_title('原始圖片')axes[1].imshow(shifted_image)
axes[1].axis('off')
axes[1].set_title('平移后的圖片')
plt.show()

隨機縮放(Random Zoom)

在這里插入圖片描述

原理
隨機縮放是對圖片進行隨機的放大或縮小操作。這有助于模型學習到物體在不同尺寸下的特征,提高模型對物體大小變化的適應性。

實現
使用 ImageDataGenerator 實現隨機縮放,示例代碼如下:


# 定義 ImageDataGenerator,設置縮放范圍為 0.8 - 1.2 倍
datagen_zoom = ImageDataGenerator(zoom_range=0.2)# 生成縮放后的圖片
zoomed_image = datagen_zoom.flow(np.array([original_image]), batch_size=1).next()[0].astype('uint8')# 顯示原始圖片和縮放后的圖片
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].imshow(original_image)
axes[0].axis('off')
axes[0].set_title('原始圖片')axes[1].imshow(zoomed_image)
axes[1].axis('off')
axes[1].set_title('縮放后的圖片')
plt.show()

隨機翻轉(Random Flip)

在這里插入圖片描述

原理
隨機翻轉包括水平翻轉和垂直翻轉。通過對圖片進行翻轉操作,可以增加數據的多樣性,讓模型學習到物體在不同鏡像狀態下的特征。

實現
使用 ImageDataGenerator 實現隨機翻轉,示例代碼如下:


# 定義 ImageDataGenerator,僅啟用水平翻轉
datagen_flip = ImageDataGenerator(horizontal_flip=True)# 生成翻轉后的圖片
flipped_image = datagen_flip.flow(np.array([original_image]), batch_size=1).next()[0].astype('uint8')# 顯示原始圖片和翻轉后的圖片
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].imshow(original_image)
axes[0].axis('off')
axes[0].set_title('原始圖片')axes[1].imshow(flipped_image)
axes[1].axis('off')
axes[1].set_title('翻轉后的圖片')
plt.show()

隨機剪切(Random Shear)

在這里插入圖片描述

原理
隨機剪切是對圖片進行一定角度的傾斜操作,模擬物體在不同視角下的變形情況,增強模型對物體形變的識別能力。

實現
使用 ImageDataGenerator 實現隨機剪切,示例代碼如下:


# 定義 ImageDataGenerator,設置剪切范圍為 0 - 0.3 弧度
datagen_shear = ImageDataGenerator(shear_range=0.3)# 生成剪切后的圖片
sheared_image = datagen_shear.flow(np.array([original_image]), batch_size=1).next()[0].astype('uint8')# 顯示原始圖片和剪切后的圖片
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].imshow(original_image)
axes[0].axis('off')
axes[0].set_title('原始圖片')axes[1].imshow(sheared_image)
axes[1].axis('off')
axes[1].set_title('剪切后的圖片')
plt.show()

亮度調整(Brightness Adjustment)

在這里插入圖片描述

原理
亮度調整是對圖片的亮度進行隨機調整,模擬不同光照條件下的拍攝情況,提高模型對光照變化的魯棒性。

實現
使用 ImageDataGenerator 實現亮度調整,示例代碼如下:


# 定義 ImageDataGenerator,設置亮度調整范圍為 0.5 - 1.5 倍
datagen_brightness = ImageDataGenerator(brightness_range=[0.5, 1.5])# 生成亮度調整后的圖片
brightened_image = datagen_brightness.flow(np.array([original_image]), batch_size=1).next()[0].astype('uint8')# 顯示原始圖片和亮度調整后的圖片
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].imshow(original_image)
axes[0].axis('off')
axes[0].set_title('原始圖片')axes[1].imshow(brightened_image)
axes[1].axis('off')
axes[1].set_title('亮度調整后的圖片')
plt.show()

對比度調整(Contrast Adjustment)

在這里插入圖片描述

原理
對比度調整是改變圖片中不同像素之間的差異程度,增強圖片的視覺效果,讓模型能夠學習到更豐富的圖像特征。

實現
使用 OpenCV 庫實現對比度調整,示例代碼如下:


import cv2
import numpy as npdef adjust_contrast(img):# 轉換為灰度圖(如需保留彩色可調整)img_gray = cv2.cvtColor(img.astype('uint8'), cv2.COLOR_RGB2GRAY)# 對比度拉伸min_val = np.min(img_gray)max_val = np.max(img_gray)stretched = (img - min_val) * (255.0 / (max_val - min_val + 1e-8))return stretched.astype('float32')# 應用自定義對比度調整
contrasted_image = adjust_contrast(original_image).astype('uint8')# 顯示原始圖片和對比度調整后的圖片
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].imshow(original_image)
axes[0].axis('off')
axes[0].set_title('原始圖片')axes[1].imshow(contrasted_image)
axes[1].axis('off')
axes[1].set_title('對比度調整后的圖片')
plt.show()

總結

圖片增強是計算機視覺任務中非常重要的一環,通過上述幾種常見的圖片增強方式,可以有效地擴充數據集,提高模型的泛化能力。在實際應用中,可以根據具體任務和數據特點選擇合適的增強方式,也可以將多種增強方式組合使用,以獲得更好的效果。希望本文能幫助你更好地理解和應用圖片增強技術。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89402.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89402.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【URL 轉換為PDF】HTML轉換為PDF

1、方法1 pdfkit 安裝依賴 # 安裝 wkhtmltopdf(系統級) # Ubuntu/Debian sudo apt install wkhtmltopdf# macOS brew install wkhtmltopdf# Windows 下載安裝:https://wkhtmltopdf.org/downloads.html# 安裝 Python 庫 pip install pdfkitimp…

單鏈表的定義、插入和刪除

一、定義一個單鏈表 struct LNode{ //定義單鏈表節點類型ElemType data; //存放節點數據元素struct LNode *next; //指針指向下一個結點 }; //增加一個新節點:在內存中申請一個結點所需空間,并用指針p指向這個結點 struct LNode * p (struc…

Nextjs官方文檔異疑惑

第一個區別:不同的頁面對應的路由器設定! 繼續用 app 路由器(推薦,Next.js 未來主流) 路由規則:app 目錄下,文件夾 page.tsx 對應路由。例如: app/page.tsx → 對應 / 路由&#xf…

突破AI模型訪問的“光標牢籠”:長上下文處理與智能環境隔離實戰

> 當AI模型面對浩瀚文檔卻只能處理零星片段,當關鍵信息散落各處而模型“視而不見”,我們該如何打破這堵無形的墻? 在自然語言處理領域,**輸入長度限制**(常被稱為“光標區域限制”)如同一個無形的牢籠,嚴重制約了大型語言模型(LLM)在真實場景中的應用潛力。無論是分…

AI 智能質檢系統在汽車制造企業的應用?

某知名汽車制造企業在其龐大且復雜的生產流程中,正面臨著棘手的汽車零部件質檢難題。傳統的人工質檢方式,完全依賴人工的肉眼觀察與簡單工具測量。質檢員們長時間處于高強度的工作狀態,精神高度集中,即便如此,由于人工…

設計模式》》門面模式 適配器模式 區別

// 復雜子系統 class CPU {start() { console.log("CPU啟動"); } } class Memory {load() { console.log("內存加載"); } } class HardDrive {read() { console.log("硬盤讀取"); } }// 門面 class ComputerFacade {constructor() {this.cpu ne…

windows內核研究(驅動開發 第一個驅動程序和調試環境搭建)

驅動開發 第一個驅動程序 驅動的開發流程 1.編寫代碼 -> 生成.sys文件 -> 部署 -> 啟動 -> 停止 ->卸載 // 編寫我們的第一個驅動程序 #include<ntddk.h>// 卸載函數 VOID DrvUnload(PDRIVER_OBJECT DriverObject) {DbgPrint("我被卸載了\n"…

ABP VNext + 多級緩存架構:本地 + Redis + CDN

ABP VNext 多級緩存架構&#xff1a;本地 Redis CDN &#x1f4da; 目錄ABP VNext 多級緩存架構&#xff1a;本地 Redis CDN一、引言 &#x1f680;二、環境與依賴 &#x1f6e0;?三、架構概覽 &#x1f310;請求全鏈路示意 &#x1f6e3;?四、本地內存緩存層 &#x1…

RGBA圖片格式轉換為RGB格式(解決convert轉換的失真問題)

使用convert轉換的問題 OpenCV 的 cv2.cvtColor(…, cv2.COLOR_BGRA2GRAY) 會直接忽略 Alpha 通道的含義&#xff0c;將它當作第四個顏色通道來處理。 轉換公式如下&#xff1a; gray 0.114*255 0.587*0 0.299*0 ≈ 29也就是說&#xff0c;即使 Alpha 為 0&#xff08;完全透…

Spring AI之Prompt開發

文章目錄1 提示詞工程1_核心策略2_減少模型“幻覺”的技巧2 提示詞攻擊防范1_提示注入&#xff08;Prompt Injection&#xff09;2_越獄攻擊&#xff08;Jailbreaking&#xff09;3 數據泄露攻擊&#xff08;Data Extraction&#xff09;4 模型欺騙&#xff08;Model Manipulat…

Java面試(基礎篇) - 第二篇!

未看第一篇的&#xff0c;這里可以直達 Java面試(基礎篇) - 第一篇 Integer對象可以用判斷嗎&#xff1f;為什么&#xff1f; 回答 不可以&#xff0c;因為 比較的是對象的實例&#xff08;內存地址&#xff09;&#xff0c;Integer是有一個緩存機制的&#xff0c;它會將-1…

【C# in .NET】11. 探秘泛型:類型參數化革命

探秘泛型:類型參數化革命 泛型是 C# 和.NET框架中一項革命性的特性,它實現了 “編寫一次,多處復用” 的抽象能力,同時保持了靜態類型的安全性和高性能。與 C++ 模板等其他語言的泛型機制不同,.NET 泛型在 CLR(公共語言運行時)層面提供原生支持,這使得它兼具靈活性、安…

菜單權限管理

菜單管理系統的整體架構1.Menu 菜單表2.role 角色表3.role_menu 角色菜 單關聯表&#xff08;多對多 &#xff09;要找role_id為3的角色能用哪個菜單:SELECT *FROM sys_menu a LEFT JOIN sys_role_menu b ON a.menu_id b.menu_id WHERE role_id3拆分開就是4.user 用戶表5.user…

SQL FOREIGN KEY:詳解及其在數據庫設計中的應用

SQL FOREIGN KEY:詳解及其在數據庫設計中的應用 引言 在數據庫設計中,數據完整性是至關重要的。SQL FOREIGN KEY(外鍵)是實現數據完整性的一種有效手段。本文將詳細解釋SQL FOREIGN KEY的概念、用途以及在實際數據庫設計中的應用。 外鍵概述 1. 定義 外鍵(FOREIGN KE…

[yotroy.cool] 記一次 spring boot 項目寶塔面板部署踩坑

個人博客https://www.yotroy.cool/&#xff0c;感謝關注&#xff5e; 圖片資源可能顯示不全&#xff0c;請前往博客查看哦&#xff01;部署了個新項目&#xff0c;給我整抑郁了。。。下面是踩坑過程 寶塔面板 MySql5.7 版本 root 密碼錯誤 這個MySQL5.7 安裝完后就跑不了&#…

前端之HTML學習

HTML 學習筆記 前端三大件 HTML&#xff1a;超文本標記語言&#xff08;HyperText Markup Language&#xff09;CSS&#xff1a;層疊樣式表JavaScript&#xff1a;客戶端腳本語言常用框架&#xff1a;jQuery Vue 3(Element plus) HTML 基本概念 超文本&#xff1a;包含圖像…

迅速高效從web2到web3轉型 ,開啟遠程工作

Web2向Web3的轉型&#xff0c;是技術、產品、組織結構和商業模式的深度變革。若要迅速且高效地完成這個轉型&#xff0c;需要清晰的路徑規劃和戰略執行。 目錄 &#x1f501; 一、理解核心區別&#xff1a;Web2 vs Web3 &#x1f680; 二、轉型路徑 1. 選擇合適的切入點 …

區塊鏈開發協作工具全景圖:從智能合約管理到去中心化治理

&#x1f4a5; 三重絞索&#xff1a;區塊鏈開發的至暗時刻 1. 版本管理的深淵 當某DeFi團隊凌晨修復漏洞時&#xff0c;發現生產環境運行的竟是兩周前的廢棄分支——37%的項目因代碼分支混亂引發生產事故&#xff08;Electric Capital 2024&#xff09;。智能合約的版本漂移如同…

冒泡排序、選擇排序、插入排序、快速排序

目錄 1. 冒泡排序 (Bubble Sort) 算法思路分析 代碼實現 復雜度分析 2. 選擇排序 (Selection Sort) 算法思路分析 代碼實現 復雜度分析 3. 插入排序 (Insertion Sort) 算法思路分析 代碼實現 復雜度分析 4. 快速排序 (Quick Sort) 算法思路分析 代碼實現 復雜度…

PHP語言基礎知識(超詳細)第一節

一. PHP簡介: PHP即“超文本預處理器”,創建于1994年,是一種通用開源腳本語言。PHP是在服務器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利于學習,使用廣泛,主要適用于Web開發領域。 二. PHP的優點:…