【ITK庫學習】使用itk庫進行圖像濾波ImageFilter:梯度Gradient

目錄

  • 1、itkGradientImageFilter
  • 2、itkGradientMagnitudeImageFilter 梯度強度
  • 3、itkGradientMagnitudeRecursiveGaussianImageFilter 帶濾波的梯度強度
  • 4、itkDerivativeImageFilter 不帶濾波的導函數

1、itkGradientImageFilter

該類是一個基類,用于使用方向導數計算圖像的梯度向量。

每個像素位置的方向導數是通過與一階導數算子卷積來計算的。

itk::GradientImageFilter< TInputImage, TOperatorValueType, TOutputValueType,TOutputImageType >

TOperatorValueType:定義導數運算符中使用的值類型(默認為浮點型),TOutputValueType定義用于輸出圖像的值類型(默認為浮點型), 輸出圖像被定義為協變矢量圖像,其值類型被指定為第三個模板參數。

示例代碼

#include "itkImage.h"
#include "itkGradientImageFilter.h"typedef itk::Image<float, 2> FloatImageType;
typedef itk::Image<unsigned char, 2> UnsignedCharImageType;bool gradientImage(UnsignedCharImageType* image)
{using GradientFilterType = itk::GradientImageFilter<UnsignedCharImageType, float>;auto gradientFilter = GradientFilterType::New();gradientFilter->SetInput(image);try{gradientFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}return true;
}

2、itkGradientMagnitudeImageFilter 梯度強度

該類是itk::GradientImageFilter的一個具體實現,用于計算圖像的梯度的幅值,即對應每個像素位置處的梯度的長度。

該類只計算梯度幅值,不涉及梯度向量的方向,主要用來幫助檢測對象輪廓和分離均勻區域。

它使用一個簡單的有限差分方式進行計算梯度強度。該濾波器在計算梯度前不會對圖像進行任何濾波,因此結果對噪聲非常敏感,而且不一定是尺度空間分析的最佳選擇。

示例代碼

#include "itkImage.h"
#include "itkGradientMagnitudeImageFilter.h"typedef itk::Image<float, 3> FloatImageType;bool gradientMagnitudeImage(FloatImageType* image, FloatImageType* outputImage)
{typedef itk::GradientMagnitudeImageFilter<FloatImageType, FloatImageType> GradientMagnitudeFilterType;typename GradientMagnitudeFilterType::Pointer gradientMagnitudeFilter = GradientMagnitudeFilterType::New();gradientMagnitudeFilter ->SetInput(image);try{gradientMagnitudeFilter ->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = gradientMagnitudeFilter->GetOutput();return true;
}

3、itkGradientMagnitudeRecursiveGaussianImageFilter 帶濾波的梯度強度

該類通過與高斯的一階導數卷積來計算圖像的梯度大小。

通過選擇一個特定的高斯標準差,就可以選擇一個相應的比例來去除通常被認為是噪聲的高頻部分。

該濾波器是使用遞歸高斯濾波器實現的。首先通過將圖像和一個高斯核卷積來平滑圖像,然后應用一個查分操作。

常用的成員函數

  • SetImage():設置輸入圖像
  • Set/GetSigma():設置/獲取Sigma值, Sigma以圖像間距為單位進行測量
  • Set/GetNumberOfWorkUnits():獲取/設置執行時要創建的工作單元數
  • Set/GetNormalizeAcrossScale():設置/獲取將用于高斯的歸一化因子

注:梯度強度圖像的動態范圍往往比輸入圖像的動態范圍小,必須注意選擇用來輸出圖像的圖像類型。

示例代碼

#include "itkImage.h"
#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"typedef itk::Image<float, 3> FloatImageType;bool gradientMagnitudeRecursiveImage(FloatImageType* image, FloatImageType* outputImage)
{const double sigma = 3;typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<FloatImageType, FloatImageType> GradMagnRecFilterType;typename GradMagnRecFilterType::Pointer  gradMagnRecFilter = GradMagnRecFilterType::New();gradMagnRecFilter->SetInput(image);gradMagnRecFilter->SetSigma(sigma);try{gradMagnRecFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = gradMagnRecFilter->GetOutput();return true;
}

4、itkDerivativeImageFilter 不帶濾波的導函數

該類主要用于計算圖像的方向導數。

每個像素位置的方向導數是通過與用戶指定階數的導數運算符進行卷積來計算的。

常用的成員函數

  • SetImage():設置輸入圖像
  • SetOrder():設置/獲取導數的階數,輸出像素類型必須有符號
  • SetDirection():設置/獲取導數相對于圖像坐標軸的方向,輸出像素類型必須有符號

示例代碼

#include "itkImage.h"
#include "itkDerivativeImageFilter.h"typedef itk::Image<float, 3> FloatImageType;bool derivativeImage(FloatImageType* image, FloatImageType* outputImage)
{const unsigned int order = 1;const unsigned int direction = 0;    //dimension number,0:x; 1:y; 2:z;typedef itk::DerivativeImageFilter<FloatImageType, FloatImageType> DerivativeFilterType;typename DerivativeFilterType::Pointer derivativeFilter = DerivativeFilterType::New();derivativeFilter->SetInput(image);derivativeFilter->SetDirection(direction);derivativeFilter->SetOrder(order);try{derivativeFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = derivativeFilter->GetOutput();return true;
}

綜上所述,幾個濾波器均適用于計算二維和三維圖像的計算,如果只需要計算圖像的梯度幅值可以選擇itkGradientMagnitudeImageFilter或itkGradientMagnitudeRecursiveGaussianImageFilter;如果需要計算圖像的導數,可以選擇itkDerivativeImageFilter可以用于圖像邊緣檢測、角點檢測等應用,具體選擇哪個濾波器還需根據具體應用場景和需求來確定。

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

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

相關文章

C++筆試題之回文數的判斷

“回文”是指正讀反讀都能讀通的句子&#xff0c;它是古今中外都有的一種修辭方式和文字游戲&#xff0c;如“我為人人&#xff0c;人人為我”等。在數學中也有這樣一類數字有這樣的特征&#xff0c;成為回文數&#xff08;palindrome number&#xff09;。 設n是一任意自然數…

MSSQL 程序集使用方法

1.C# 寫一個程序 1.1新建一個項目【類庫【.Net FrameWork】 1.2編寫代碼 刪除 namespace ApiSQLClass { } 代碼如下&#xff1a;【具體調用API模式根據具體編寫】 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.…

1. 使用poll或epoll創建echo服務器

1. 說明&#xff1a; 此篇博客主要記錄一種客戶端實現方式&#xff0c;和兩種使用poll或者epoll分別創建echo服務器的方式&#xff0c;具體可看代碼注釋&#xff1a; 2. 相關代碼&#xff1a; 2.1 echoClient.cpp #include <iostream> #include <cstdio> #incl…

C語言中的 sizeof 運算符

在 C 語言中&#xff0c;sizeof 是一個運算符&#xff0c;用于獲取給定類型或變量的字節大小。它返回一個 size_t 類型的值&#xff0c;表示以字節為單位的對象大小。 sizeof 運算符有以下特點&#xff1a; 用法&#xff1a;sizeof 運算符可以應用于數據類型或表達式。計算靜…

酷開科技以創新為動力用大數據提升品牌認知

在21世紀的今天&#xff0c;我們生活在一個被互聯網深深改變的世界。互聯網不僅改變了我們的生活方式&#xff0c;也正在改變我們的思維方式和工作方式。而互聯網作為一種新的發展趨勢&#xff0c;更是為我們提供了無數的機會和無限可能性&#xff0c;從電子商務時代到社交網絡…

CSP-何以包郵?

題目描述 新學期伊始&#xff0c;適逢頓頓書城有購書滿 x 元包郵的活動&#xff0c;小 P 同學欣然前往準備買些參考書。 一番瀏覽后&#xff0c;小 P 初步篩選出 n 本書加入購物車中&#xff0c;其中第 i 本&#xff08;1≤i≤n&#xff09;的價格為 ai 元。 考慮到預算有限&am…

scala編碼

1、Scala高級語言 Scala簡介 Scala是一門類Java的多范式語言&#xff0c;它整合了面向對象編程和函數式編程的最佳特性。具體來講Scala運行于Java虛擬機&#xff08;JVM)之上&#xff0c;井且兼容現有的Java程序&#xff0c;同樣具有跨平臺、可移植性好、方便的垃圾回收等特性…

ubuntu server 20.04 備份和恢復 系統 LTS

ubuntu server 20.04 備份和恢復 系統 LTS tar命令系統備份與恢復&#xff08;還原or新裝&#xff09; 備份系統 cd / su root tar cvpzf backup.tgz --exclude/tmp --exclude/run --exclude/dev --exclude/snap --exclude/proc --exclude/lostfound --exclude/backup.tgz …

啟動游戲出現concrt140.dll錯誤的8種解決方法

在計算機使用過程中&#xff0c;我們經常會遇到一些錯誤提示&#xff0c;其中之一就是找不到concrt140.dll文件。這個錯誤通常會導致程序無法正常運行&#xff0c;給用戶帶來困擾。本文將介紹找不到concrt140.dll無法繼續執行代碼的8個方法&#xff0c;同時探討concrt140.dll丟…

LinuxBasicsForHackers筆記 -- 文件系統和存儲設備管理

設備目錄/dev Linux 有一個特殊的目錄&#xff0c;其中包含代表每個連接設備的文件&#xff1a;相應命名的 /dev 目錄。 /dev中有很多設備列表。 特別令人感興趣的是設備 sda1、sda2、sda3、sdb 和 sdb1&#xff0c;它們通常是硬盤驅動器及其分區以及 USB 閃存驅動器及其分區…

理解基于 Hadoop 生態的大數據技術架構

轉眼間&#xff0c;一年又悄然而逝&#xff0c;時光荏苒&#xff0c;歲月如梭。當回首這段光陰&#xff0c;不禁感嘆時間的匆匆&#xff0c;仿佛只是一個眨眼的瞬間&#xff0c;一年的旅程已成為過去&#xff0c;而如今又到了畫餅的時刻了 &#xff01; 基于 Hadoop 生態的大數…

固態硬盤SSD

目錄 1.2 組成1.3 讀寫性能特性1.4 與機械硬盤相比的特點1.5 磨損均衡技術 \quad \quad SSD基于閃存技術Flash Memory, 屬于電可擦除ROM, 即EEPROM \quad 1.2 組成 \quad \quad \quad 系統對固態硬盤的讀寫是以頁為單位的 固態硬盤里的塊相當于機械硬盤里的磁道 固態硬盤里的頁…

Redis基礎系列-持久化

Redis基礎系列-持久化 文章目錄 Redis基礎系列-持久化1. 什么是持久化2. 為什么要持久化3. 持久化的兩種方式3.1 持久化方式1&#xff1a;RDB(redis默認持久化方式)3.11 配置步驟-自動觸發3.12 配置步驟-手動觸發3.12 優點3.13 缺點3.14 檢查和修復RDB快照文件3.15 哪些情況會觸…

每天一個Linux命令 -- (7)more命令

歡迎閱讀《每天一個Linux命令》系列&#xff01;在本篇文章中&#xff0c;將介紹Linux系統下的more命令&#xff0c;它用于逐屏顯示文件的內容。 概念 more命令是Linux系統下的文件逐屏顯示命令&#xff0c;用于逐屏顯示文件的內容。 命令操作 more命令的語法如下&#xff1…

ubuntu22.04 安裝cuda

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由 NVIDIA 開發的一種并行計算平臺和編程模型。它允許開發者利用 NVIDIA 的 GPU&#xff08;圖形處理單元&#xff09;進行高效的計算處理。CUDA 通過提供一系列的 C、C 和 Fortran 擴展&#xff0c;使得開發…

我的NPI項目之Android電源系列 -- 關于剩余充滿時間的問題(一)

我的新項目是基于高通最新的5G平臺&#xff0c;但是由于還沒有拿到EVT。所以&#xff0c;就在目舊的平臺和OS上進行學習。遇到第一個問題就是插上type-c之后&#xff0c;充滿剩余時間異常的問題。 問題描述&#xff0c;在充電過程中&#xff0c;顯示充滿時間為“0 min left unt…

9.基于SpringBoot3+I18N實現國際化

1. 新建資源文件 在resources目錄下新建目錄i18n, 然后 新建messages_en.properties文件 user.login.erroraccount or password error&#xff01;新建messages_zh_CN.properties文件 user.login.error帳戶或密碼錯誤&#xff01;2. 新建LocaleConfig.java文件 Configurati…

2004-2021年上市公司環境規制強度相關數據

2004-2021年上市公司環境規制強度相關數據 1、時間&#xff1a;2004-2021年 2、指標&#xff1a;年份、股票代碼、股票簡稱、行業名稱、行業代碼、省份、城市、區縣、行政區劃代碼、城市代碼、區縣代碼、首次上市年份、上市狀態、所屬省份-工業增加值_億元、所屬省份-治理廢氣…

Flink流批一體計算(24):Flink SQL之mysql維表實時關聯

目錄 1.維表 2.數據準備 創建源數據 創建維度表 創建Sink表 3.配置任務 Flink SQL創建kafka源表 Flink SQL創建MySQL維表 Flink SQL創建MySQL結果表 編寫計算任務 核驗數據 1.維表 目前在實時計算的場景中&#xff0c;大多數都使用過MySQL、Hbase、redis作為維表引擎…

PTA:計算總分

題干 請編寫一個函數sum&#xff0c;函數的功能是&#xff1a;計算一個由結構體表示的包含多門課程成績組成的學生的總成績。 函數接口定義&#xff1a; double sumScore(struct student stu); 其中 stu是用戶傳入的參數。函數須返回學生的總成績。 裁判測試程序樣例&#x…