【scipy 基礎】--圖像處理

来源:https://www.cnblogs.com/wang_yb/archive/2023/11/14/17830942.html
-Advertisement-
Play Games

SciPy庫本身是針對科學計算而不是圖像處理的,只是圖像處理也包含了很多數學計算,所以Scipy也提供了一個專門的模塊ndimage用於圖像處理。 ndimage模塊提供的功能包括輸入/輸出圖像、顯示圖像、基本操作(如裁剪、翻轉、旋轉等)、圖像過濾(如去噪、銳化等)、圖像分割、分類、特征提取以及註冊 ...


SciPy庫本身是針對科學計算而不是圖像處理的,只是圖像處理也包含了很多數學計算,
所以Scipy也提供了一個專門的模塊ndimage用於圖像處理。

ndimage模塊提供的功能包括輸入/輸出圖像、顯示圖像、基本操作(如裁剪、翻轉、旋轉等)、圖像過濾(如去噪、銳化等)、圖像分割、分類、特征提取以及註冊/配準等任務。

這個模塊支持多種圖像格式的讀取和寫入,使得對圖像的處理變得方便快捷。

1. 主要功能

雖然圖像處理不是Scipy的主要目的,Scipy中也提供了70多個各類圖像處理函數。

類別 主要函數 說明
過濾器 包含convolve等20多個函數 各類捲積和濾波相關的計算函數
傅立葉濾波器 包含fourier_ellipsoid等4個函數 多維橢球傅里葉,高斯傅里葉等濾波器
圖像插值 包含affine_transform等8個函數 圖像的反射變換,移動,旋轉等相關函數
圖像測量 包含center_of_mass等將近20個函數 計算圖像幾何特征的相關函數
形態學 包含binary_closing等20多個函數 圖像的侵蝕,膨脹,二元開閉運算等等

圖像處理底層函數專業性較強,下麵結合圖片演示一些比較直觀的例子。

2. 邊緣檢測

圖像邊緣檢測在電腦視覺和圖像處理中是非常重要的任務之一。
邊緣是圖像中像素值發生顯著變化的地方,它可以提供有關圖像的重要信息,例如物體的輪廓、邊界等。

ndimage模塊中提供了多種演算法來檢測邊緣,下麵演示三種不同的邊緣檢測演算法的效果:
(示例中所用的圖片是維基百科上找的一個python logo

2.1. sobel演算法

import matplotlib.pyplot as plt
import cv2
from scipy import ndimage

image = plt.imread("d:/share/python-logo.png")
# 圖像灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用索貝爾邊緣檢測演算法
name = "sobel"
edges = ndimage.sobel(gray)

# 顯示原始圖像和邊緣檢測結果
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image)
ax[0].set_title("原始圖像")
ax[1].imshow(gray, cmap="gray")
ax[1].set_title("灰度圖像")
ax[2].imshow(edges, cmap="gray")
ax[2].set_title("邊緣檢測({}演算法)".format(name))
plt.show()

image.png

2.2. prewitt演算法

代碼和上面的類似,不同的部分就下麵兩行。

# 使用prewitt邊緣檢測演算法
name = "prewitt"
edges = ndimage.prewitt(gray)

image.png

2.3. laplace演算法

上面兩種演算法的效果看上去很類似,laplace演算法的結果看上去比上面兩種效果更好一些。

name = "laplace"
edges = ndimage.laplace(gray)

image.png

3. 侵蝕和膨脹

侵蝕和膨脹是最基本的兩種圖像形態學操作,它們的作用用來增強目標特征。
仍然使用上面的python logo圖片,演示侵蝕和膨脹的操作。

import matplotlib.pyplot as plt
import cv2
from scipy import ndimage

image = plt.imread("d:/share/python-logo.png")
# 圖像灰度化
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 圖像侵蝕
structure = ndimage.generate_binary_structure(2, 2)
erosion = ndimage.binary_erosion(image, structure)

# 圖像膨脹
dilation = ndimage.binary_dilation(image, structure)

# 顯示原始圖像、侵蝕圖像和膨脹圖像
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image, cmap="gray")
ax[0].set_title("灰度圖像")
ax[1].imshow(erosion, cmap="gray")
ax[1].set_title("圖像--侵蝕")
ax[2].imshow(dilation, cmap="gray")
ax[2].set_title("圖像--膨脹")
plt.show()

image.png
簡單來說,侵蝕操作會擴張圖像中黑色的區域,反之,膨脹操作會擴張圖像中白色的區域。
直觀上來看的話,侵蝕變了,膨脹變了。

4. 總結

Scipy圖像模塊本質上是把圖像當作數組來處理,
雖然它不是專門的圖像處理庫,不過它處理速度很快,且和numpy等庫結合緊密,
經常處理圖像的朋友可以把它當成一個輔助的工具。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.首先是準備施法材料 JDK的下載地址:https://www.oracle.com/java/technologies/downloads/ 然後選擇自己的想要的版本和英雄(系統) 選擇x64 Compressed Archive免安裝版本進行下載(解壓就用,免除瘋狂確認的煩惱) 解壓到某個位置 ...
  • 來源:blog.csdn.net/qq_44384533/article/details/112324224 之前紅包權益領取查詢的介面超時了,因為有用戶訂購的權益有點多 解決方案 用線程池+ FutureTask將1個查詢拆分成多個小查詢 選擇FutureTask是因為它具有僅執行1次run()方 ...
  • NullPointerException(空指針異常):當試圖調用實例方法或訪問實例變數時,對象引用為 null 時拋出。ArithmeticException(算術異常):當試圖做出違反算術規則的操作時拋出,比如除以零。ClassCastException(類轉換異常):當試圖將對象強制轉換為不是... ...
  • 從JDK11到JDK17,到底帶來了哪些特性呢?亞毫秒級的ZGC效果到底怎麼樣呢?值得我們升級嗎?而且升級過程會遇到哪些問題呢?帶著這些問題,本篇文章將帶來完整的JDK11升級JDK17最全實踐。 ...
  • 0 前言 潛心打造國內一流,國際領先的技術乾貨。 文章收錄在我的 GitHub 倉庫,歡迎Star/fork: JavaEdge-Interview 受網路和運行環境影響,應用程式可能遇到暫時性故障,如瞬時網路抖動、服務暫時不可用、服務繁忙導致超時等。 自動重試機制可大幅避免此類故障,保障操作成功執 ...
  • 來源:blog.csdn.net/weixin_42653522/article/details/117151913 1、前言 ApplicationContext 中的事件處理是通過 ApplicationEvent 類和 ApplicationListener 介面提供的。如果將實現了 Appl ...
  • 學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第二章、第一個Spring程式 1.軟體版本 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5. ...
  • 目錄1.修飾類時2.修飾方法時3.修飾屬性和局部變數時3.1修飾局部變數時3.2修飾成員變數時3.3修飾類變數時4.final與普通變數的區別5.final用於引用 1.修飾類時 1.只能是公共的(public)就算不寫也是public 2.被final修飾的類不可以被繼承 //前面預設有個publ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...