組為核心的 Python 圖像處理實(shí)踐指南)
計(jì)算機(jī)視覺圖像處理科學(xué)計(jì)算【免費(fèi)下載鏈接】scikit-imageImage processing in Python項(xiàng)目地址https://gitcode.com/gh_mirrors/sc/scikit-image點(diǎn)擊查看免費(fèi)下載本篇技術(shù)指南以 scikit-image 官方《Getting started》文檔為骨架系統(tǒng)講解如何在 Python 中以 NumPy 數(shù)組為統(tǒng)一數(shù)據(jù)模型完成圖像讀取、示例數(shù)據(jù)獲取、灰度閾值分割與批量加載等入門操作。讀完本文你將掌握import skimage as ski的包結(jié)構(gòu)、內(nèi)置示例數(shù)據(jù)的使用方式、imread讀取自有圖像的細(xì)節(jié)以及如何借助imageio、natsort等生態(tài)工具擴(kuò)展圖像加載能力并能直接在真實(shí)倉庫源碼中定位每一步操作對(duì)應(yīng)的實(shí)現(xiàn)。認(rèn)識(shí) scikit-image以 NumPy 數(shù)組為數(shù)據(jù)核心scikit-image 是一個(gè)基于 NumPy 數(shù)組工作的 Python 圖像處理包約定俗成的導(dǎo)入方式是 import skimage as ski與把圖像封裝為自定義類對(duì)象不同scikit-image 始終堅(jiān)持圖像即數(shù)組的原則灰度二維圖像對(duì)應(yīng)形狀為(M, N)的二維 ndarrayRGB 彩色圖像對(duì)應(yīng)形狀為(M, N, 3)的三維 ndarrayRGBA 圖像則對(duì)應(yīng)(M, N, 4)。這一設(shè)計(jì)讓所有算法函數(shù)都能無縫對(duì)接 NumPy 生態(tài)也意味著讀者只需掌握數(shù)組切片、廣播、索引等基礎(chǔ)操作即可完成大量預(yù)處理工作。從倉庫的包入口 src/skimage/init.py 可以看到頂層skimage對(duì)外暴露了一組明確的子模塊color色彩空間轉(zhuǎn)換、data示例圖像與數(shù)據(jù)集、draw繪制基元、exposure強(qiáng)度調(diào)整與直方圖均衡、feature特征檢測(cè)與提取、filters銳化、邊緣、閾值化等、graph圖論操作、io圖像與視頻的讀寫、measure區(qū)域?qū)傩耘c輪廓測(cè)量、metrics距離與相似度指標(biāo)、morphology形態(tài)學(xué)算法、registration圖像配準(zhǔn)、restoration去噪與去卷積、segmentation圖像分割、transform幾何變換以及util通用工具。絕大多數(shù)功能函數(shù)都分布在各個(gè)子模塊中例如示例數(shù)據(jù)位于ski.data、濾波與閾值算法位于ski.filters camera ski.data.camera()當(dāng)前倉庫版本為0.26.1rc0.dev0見 src/skimage/init.py并采用lazy_loader實(shí)現(xiàn)子模塊的按需加載見 src/skimage/init.py首次import skimage的成本很低。各子模塊完整的公開函數(shù)清單可查閱倉庫內(nèi)對(duì)應(yīng)的 API 存根文件例如 src/skimage/filters/init.pyi、src/skimage/data/init.pyi這些.pyi文件同時(shí)也是類型提示與 IDE 補(bǔ)全的依據(jù)。圖像就是 NumPy 數(shù)組以 camera 圖像驗(yàn)證ski.data.camera()返回一張經(jīng)典的灰度相機(jī)測(cè)試圖從源碼 src/_skimage2/data/_fetchers.py 可知其實(shí)際加載自包內(nèi)數(shù)據(jù)文件data/camera.png返回一個(gè)(512, 512)的uint8ndarray type(camera) class numpy.ndarray # 一張 512 行、512 列的圖像 camera.shape (512, 512)把圖像當(dāng)作數(shù)組帶來的直接收益是camera[100:200, 300:400]即可裁剪 ROIcamera.mean()即可統(tǒng)計(jì)整體亮度camera.T即可轉(zhuǎn)置。任何 NumPy 技巧都能直接作用于圖像這也是 scikit-image 與眾多深度學(xué)習(xí)框架同樣以 ndarray 傳遞數(shù)據(jù)天然契合的原因。skimage.data子模塊開箱即用的示例數(shù)據(jù)data子模塊提供了一組覆蓋分割、去噪、特征檢測(cè)、配準(zhǔn)等典型場景的示例圖像全部可從 src/skimage/data/init.pyi 查看到包括astronaut、camera、coins、chelsea、coffee、horse、moon、retina、rocket、text、cells3d、stereo_motorcycle、shepp_logan_phantom等。這些函數(shù)大多返回標(biāo)準(zhǔn)形狀與固定 dtype 的數(shù)組如camera為(512, 512) uint8非常適合用來快速驗(yàn)證算法效果、復(fù)現(xiàn)文檔示例。需要注意數(shù)據(jù)獲取機(jī)制的演變新版數(shù)據(jù)集不再全部隨包分發(fā)而是通過pooch按需下載到平臺(tái)緩存目錄Linux 下默認(rèn)$HOME/.cache/scikit-image并由環(huán)境變量SKIMAGE_DATADIR可覆蓋具體實(shí)現(xiàn)見 src/_skimage2/data/_fetchers.py。因此ski.data_dir指向的是 pooch 管理的緩存數(shù)據(jù)目錄[src/_skimage2/data/_fetchers.py](https://link.gitcode.com/i/8820d806ac2d1a3c6d76436c68b6cc83)而不是源碼包目錄legacy_data_dir才是包內(nèi)自帶數(shù)據(jù)的目錄src/_skimage2/data/_fetchers.py。首次調(diào)用示例數(shù)據(jù)函數(shù)時(shí)會(huì)觸發(fā)下載且 scikit-image 會(huì)對(duì)數(shù)據(jù)文件做哈希校驗(yàn)以保證完整性。第一個(gè)完整流程Otsu 閾值分割硬幣圖像官方文檔用一個(gè)經(jīng)典組合演示了示例數(shù)據(jù) 閾值分割的最小工作流 coins ski.data.coins() threshold_value ski.filters.threshold_otsu(coins) threshold_value 107coins是一張包含多枚硬幣的灰度圖threshold_otsu根據(jù) Otsu 法自動(dòng)尋找能把前景硬幣與背景分開的最優(yōu)灰度閾值這里得到閾值107隨后即可通過binary coins threshold_value得到二值掩膜。從實(shí)現(xiàn)看src/_skimage2/filters/thresholding.py 中threshold_otsu(imageNone, nbins256, *, histNone)的核心邏輯是先基于nbins256計(jì)算直方圖對(duì)整數(shù)數(shù)組該參數(shù)會(huì)被忽略再遍歷所有可能閾值最大化類間方差來選定最優(yōu)閾值返回值為浮點(diǎn)閾值所有強(qiáng)度高于該值的像素被視為前景。該函數(shù)還內(nèi)置了防御性檢查——若輸入形狀類似 RGB 圖像會(huì)發(fā)出警告若整幅圖像強(qiáng)度恒定則直接返回該值。配合 src/skimage/filters/thresholding.py 中的threshold_li、threshold_local等其他閾值方法可以針對(duì)不同光照與對(duì)比度條件靈活選型。讀取你自己的圖像skimage.io.imread處理自有數(shù)據(jù)時(shí)可直接用ski.io.imread將圖像文件讀為 NumPy 數(shù)組 import os filename os.path.join(ski.data_dir, moon.png) moon ski.io.imread(filename)從源碼 src/_skimage2/io/_io.py 可以看到imread(fname, as_grayFalse, pluginNone, **plugin_args)的完整語義fname文件名字符串或pathlib.PathPath 對(duì)象會(huì)被自動(dòng)解析為絕對(duì)路徑字符串a(chǎn)s_grayTrue把彩色圖像轉(zhuǎn)換為灰度返回 64 位浮點(diǎn)數(shù)組本身已是灰度的圖像不做轉(zhuǎn)換。轉(zhuǎn)換內(nèi)部先處理 RGBArgba2rgb再執(zhí)行rgb2gray返回值約定灰度圖為M×NRGB 圖為M×N×3RGBA 圖為M×N×4src/_skimage2/io/_io.py若讀入的多通道數(shù)組通道維度不在最后一維如某些 TIFF 堆棧為(C, M, N)實(shí)現(xiàn)會(huì)自動(dòng)通過np.swapaxes將通道軸交換到末尾src/_skimage2/io/_io.py。需要留意的是imread的plugin參數(shù)及整個(gè)插件基礎(chǔ)設(shè)施自 0.25 版本起被標(biāo)記為棄用、計(jì)劃在 0.27 移除src/_skimage2/io/_io.py。因此官方建議如果需要對(duì)圖像加載做更精細(xì)的控制如指定解碼器、讀取多頁 TIFF、控制內(nèi)存應(yīng)直接使用imageio等外部讀寫庫而非繼續(xù)傳插件參數(shù)。倉庫中 src/_skimage2/io/_io.py 還提供了imread_collection(load_pattern, conserve_memoryTrue)用于按通配符模式批量讀取以及imsave(fname, arr, check_contrastTrue)用于保存保存時(shí)會(huì)自動(dòng)檢測(cè)低對(duì)比度與布爾圖像并給出警告src/_skimage2/io/_io.py。用外部庫加載圖像更精細(xì)的讀取控制如果imread的默認(rèn)行為不足以滿足需求官方文檔明確建議使用生態(tài)中其他成熟庫將圖像讀入 NumPy 數(shù)組例如imageio的 v3 函數(shù)式接口 import imageio.v3 as iio3 filename os.path.join(ski.data_dir, moon.png) moon iio3.imread(filename)imageio.v3.imread返回的同樣是 ndarray因此可以無縫交給ski.filters、ski.segmentation等下游算法繼續(xù)處理。選擇外部庫的價(jià)值在于可以精確指定格式、解碼器、讀取幀范圍與內(nèi)存策略這在處理 DICOM、多頁 TIFF、視頻幀等復(fù)雜輸入時(shí)尤為關(guān)鍵。類似的方案還有tifffile專精 TIFF 族格式imread在檢測(cè)到.tiff/.tif后綴時(shí)內(nèi)部也會(huì)優(yōu)先選用它見 src/_skimage2/io/_io.py以及PIL等。批量加載多張圖像用 natsort 做自然排序當(dāng)目錄中存在多張圖像尤其是文件名帶編號(hào)前綴時(shí)直接使用os.listdir得到的順序是字典序而非自然序?qū)е?1.png, 010.png, 0101.png排在02.png前面。官方文檔推薦用natsort進(jìn)行自然排序后逐個(gè)讀取 import os from natsort import natsorted, ns list_files os.listdir(.) list_files [01.png, 010.png, 0101.png, 0190.png, 02.png] list_files natsorted(list_files) list_files [01.png, 02.png, 010.png, 0101.png, 0190.png] image_list [] for filename in list_files: ... image_list.append(ski.io.imread(filename))經(jīng)過natsorted處理后編號(hào)文件按數(shù)值大小而非字符順序排列從而保證按時(shí)間/幀序讀取圖像序列的正確性。這種先排序、再循環(huán)imread的模式是后續(xù)構(gòu)建圖像序列處理如光流估計(jì)、視頻分析、時(shí)間序列去噪的常用基礎(chǔ)對(duì)于更大規(guī)模的數(shù)據(jù)還可進(jìn)一步配合 src/skimage/io/collection.py 中的ImageCollection實(shí)現(xiàn)惰性加載與內(nèi)存優(yōu)化。小結(jié)與下一步入門 scikit-image 只需記住三條主線以import skimage as ski引入包并按子模塊調(diào)用函數(shù)、圖像始終是 NumPy 數(shù)組、用ski.data快速獲取示例數(shù)據(jù)、用ski.io.imread/外部庫加載自有數(shù)據(jù)。在此基礎(chǔ)上建議按需深入安裝與版本管理參考 doc/source/user_guide/install.rst 與 requirements/default.txt數(shù)據(jù)類型與數(shù)值范圍約定參考 doc/source/user_guide/data_types.rst灰度、浮點(diǎn)、布爾等 dtype 語義算法細(xì)節(jié)則以 src/skimage 與 src/_skimage2 下的源碼及 tests 目錄中的測(cè)試用例為第一手依據(jù)。贊分享計(jì)算機(jī)視覺圖像處理科學(xué)計(jì)算【免費(fèi)下載鏈接】scikit-imageImage processing in Python項(xiàng)目地址https://gitcode.com/gh_mirrors/sc/scikit-image點(diǎn)擊查看免費(fèi)下載相關(guān)推薦scikit-image入門指南Python圖像處理的終極教程scikit image入門指南Python圖像處理的終極教程 想要快速掌握Python圖像處理技能嗎 scikit image作為Python生態(tài)中最計(jì)算機(jī)視覺圖像處理科學(xué)計(jì)算scikit-image終極完整指南Python圖像處理庫快速上手scikit image終極完整指南Python圖像處理庫快速上手 scikit image 是Python中最強(qiáng)大的圖像處理庫之一為科學(xué)家、工程師和開發(fā)者計(jì)算機(jī)視覺圖像處理科學(xué)計(jì)算PHP 圖像處理庫gumlet/php-image-resize 快速入門與實(shí)踐PHP 圖像處理庫gumlet/php image resize 快速入門與實(shí)踐 項(xiàng)目介紹 gumlet/php image resize 是一個(gè)用于 PHP圖像處理上一篇如何用5分鐘用Supertest寫出第一個(gè)Node.js接口測(cè)試快速上手教程下一篇diffusers 中的 AnyFlowTransformer3DModel雙向流映射 3D Transformer 架構(gòu)解析與實(shí)戰(zhàn)指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考