【ITK庫學習】使用itk庫進行圖像濾波ImageFilter:Voting濾波器

目錄

  • 1、itkVotingBinaryImageFilter
  • 2、itkVotingBinaryHoleFillingImageFilter 洞穴充填濾波器
  • 3、itkVotingBinaryIterativeHoleFillingImageFilter
  • 4、itkLabelVotingImageFilter

1、itkVotingBinaryImageFilter

該類是一個基類,用于根據前景和背景像素的鄰域投票進行二值圖像處理。子類包括itkVotingBinaryHoleFillingImageFilter和itkVotingBinaryIterativeHoleFillingImageFilter。

筆記
非前景或背景的像素將保持不變。

常用的成員函數

  • Set/GetRadius():設置/獲取用于計算中位數的鄰域半徑
  • Set/GetForegroundValue():設置/獲取與二進制輸入圖像上的前景(或對象)和背景關聯的值
  • Set/GetBackgroundValue():設置/獲取與二進制輸入圖像上的前景(或對象)和背景關聯的值
  • Set/GetSurvivalThreshold():設置/獲取生存閾值,當鄰域 ON 的數量小于此生存閾值中定義的值時,ON 的像素將關閉
  • Set/GetBirthThreshold():設置/獲取出生閾值, 當鄰域 ON 的數量大于此閾值中定義的值時,關閉的像素將打開。

2、itkVotingBinaryHoleFillingImageFilter 洞穴充填濾波器

該類主要通過對每個像素的鄰域前景像素數量進行比較,占大多數時將背景像素轉換為前景像素,來填充孔和空腔。

此類是一個針對孔洞填充的特殊情況的子類,它首先進行一次基于投票的二值圖像處理,然后基于結果的前景像素來填充孔洞。

常用的成員函數

  • Set/GetMajorityThreshold():設置/獲取多數門檻,超過 50% 的像素數量將決定OFF像素是否變為 ON,例如,如果某個像素的鄰域有124個像素(不包括其自身),則 50% 將是 62,如果您將多數閾值設置為 5,則意味著過濾器需要67個或更多鄰域像素才能打開以便將當前關閉像素切換為打開,默認值為 1。
  • SetSurvivalThreshold():保護 SetBirthThreshold() 和 SetSurvivalThreshold() 方法,以便此過濾器的用戶無法訪問它們
  • SetBirthThreshold():保護 SetBirthThreshold() 和 SetSurvivalThreshold() 方法,以便此過濾器的用戶無法訪問它們
  • GetNumberOfPixelsChanged():返回執行過濾器時更改的像素數
  • Set/GetForegroundValue():設置/獲取與二進制輸入圖像上的前景(或對象)和背景關聯的值
  • Set/GetBackgroundValue():設置/獲取與二進制輸入圖像上的前景(或對象)和背景關聯的值
  • Set/GetRadius():設置/獲取用于計算鄰域半徑

示例代碼

#include "itkImage.h"
#include "itkVotingBinaryHoleFillingImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool votingBinaryHollFillingImageFilter(ShortImageType* image, ShortImageType* outputImage)
{ShortImageType::SizeType indexRadius;indexRadius[0] = 2; // radius along xindexRadius[1] = 2; // radius along yindexRadius[2] = 2; // radius along ztypedef itk::VotingBinaryHoleFillingImageFilter<ShortImageType, ShortImageType> VBHollFillFilterType;typename VBHollFillFilterType::Pointer vBHoleFillFilter = VBHollFillFilterType::New();vBHoleFillFilter->SetInput(image);vBHoleFillFilter->SetRadius(indexRadius);     //設置鄰域半徑vBHoleFillFilter->SetForegroundValue(255);    //指定用來作為前景和背景的灰度vBHoleFillFilter->SetBackgroundValue(0);vBHoleFillFilter->SetMajorityThreshold(3);    //表示鄰域中前景的數量至少應為(直徑*直徑-1)+MajorityThreshold值try{vBHoleFillFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = vBHoleFillFilter->GetOutput();return true;
}

3、itkVotingBinaryIterativeHoleFillingImageFilter

該類是itkVotingBinaryHoleFillingImageFilter的進一步擴展。它通過多次迭代的二值圖像處理來填補漏洞和空洞。

在每次迭代中,它使用前一次迭代的結果作為輸入,并產生一個新的結果,直到達到指定的迭代次數或結果像素不再改變為止。此過濾器基于單個圖像類型進行模板化,輸出圖像類型必須與輸入圖像類型相同。

過濾器的目的是填充中等尺寸(半徑數十像素)的孔。原則上,迭代次數與要填充的孔的大小有關。孔越大,必須使用此過濾器運行更多迭代才能填充整個孔。鄰域的大小還與孔邊界的曲率以及孔的大小有關。請注意,作為附帶效果,該過濾器還可能填充結構外側的空腔。

常用的成員函數

  • Set/GetRadius():設置/獲取用于計算鄰域半徑
  • Set/GetMajorityThreshold():設置/獲取多數門檻,超過 50% 的像素數量將決定OFF像素是否變為 ON,例如,如果某個像素的鄰域有124個像素(不包括其自身),則 50% 將是 62,如果您將多數閾值設置為 5,則意味著過濾器需要67個或更多鄰域像素才能打開以便將當前關閉像素切換為打開,默認值為 1。
  • Set/GetForegroundValue():設置/獲取與二進制輸入圖像上的前景(或對象)和背景關聯的值
  • Set/GetBackgroundValue():設置/獲取與二進制輸入圖像上的前景(或對象)和背景關聯的值
  • Set/GetMaximumNumberOfIterations():設置/獲取最大迭代次數,只要在前一次迭代中至少有一個像素發生變化,或者直到達到最大迭代次數前,會一直迭代執行該濾波器
  • Set/GetCurrentNumberOfIterations():設置/獲取在任何給定時間執行的迭代次數,這在執行結束時很有用,可以驗證執行了多少次迭代
  • GetNumberOfPixelsChanged():返回執行過濾器時更改的像素數

示例代碼

#include "itkImage.h"
#include "itkVotingBinaryIterativeHoleFillingImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool votingBinaryIterativeHollFillingImageFilter(ShortImageType* image,ShortImageType* outputImage, int numberOfIterations)
{ShortImageType::SizeType indexRadius;indexRadius[0] = 2; // radius along xindexRadius[1] = 2; // radius along yindexRadius[2] = 2; // radius along ztypedef itk::VotingBinaryIterativeHoleFillingImageFilter<ShortImageType> VBIterativeHoleFillFilterType;typename VBIterativeHoleFillFilterType::Pointer vBIterHoleFillFilter = VBIterativeHoleFillFilterType::New();vBIterHoleFillFilter->SetInput(image);vBIterHoleFillFilter->SetRadius(indexRadius);vBIterHoleFillFilter->SetBackgroundValue(0);vBIterHoleFillFilter->SetForegroundValue(255);vBIterHoleFillFilter->SetMajorityThreshold(2);vBIterHoleFillFilter->SetMaximumNumberOfIterations(numberOfIterations);try{vBIterHoleFillFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = vBIterHoleFillFilter->GetOutput();return true;
}

這三個類都是基于投票的二值圖像處理算法,其中itkVotingBinaryHoleFillingImageFilter和itkVotingBinaryIterativeHoleFillingImageFilter專門用于孔洞填充的應用。itkVotingBinaryHoleFillingImageFilter只進行一次處理,而itkVotingBinaryIterativeHoleFillingImageFilter可通過多次迭代來獲得更好的結果。

4、itkLabelVotingImageFilter

該類是一個像素級別的標簽融合濾波器,它根據其鄰域中的像素標簽來融合給定像素的標簽。

該濾波器通過對每個像素進行投票來實現標簽融合的操作,每個像素的鄰域中的每個像素都向指定的標簽進行投票,投票最多的標簽將成為該像素的最終標簽。如果最大投票數為不唯一,即有多個標簽具有最大投票數,則將“未決定”標簽分配給該輸出像素。

默認情況下,用于未確定像素的標簽是輸入圖像中使用的最大標簽值加一。 由于具有 8 位像素值的圖像可以使用所有 256 個可能的標簽值,因此允許將 8 位(即字節)圖像組合成 16 位(即短)輸出圖像。

與傳統的多數投票方法不同,LabelVotingImageFilter使用了一種基于距離加權的投票策略,以減少噪聲或多個標簽的不一致性。

此類的輸入圖像的像素類型應當是可比較的,支持相應的運算符,輸出圖像的像素類型可以是任何整數標量類型。

常用的成員函數

  • Set/GetRadius():設置/獲取鄰域的半徑
  • SetLabelForUndecidedPixels():設置在投票過程中未決定的像素的標簽
  • GetLabelForUndecidedPixels():獲取在投票過程中未決定的像素的標簽,Update過濾器后,此函數返回用于當前輸出中未確定像素的實際標簽值,請注意,當調用SetLabelForUndecidedPixels 時,該值將被覆蓋,并且新值僅在下一次過濾器更新時生效。
  • UnsetLabelForUndecidedPixels():取消未確定像素的標簽值并打開自動選擇

注意itkLabelVotingImageFilter類的模板參數需要為無符號整數類型的像素類型,不要弄錯,否則會報錯““初始化”: 無法從“itk::Concept::IsUnsignedInteger<short>::Constraints::TrueT”轉換為“itk::Concept::Detail::UniqueType_bool<false>””。

示例代碼

#include "itkImage.h"
#include "itkLabelVotingImageFilter.h"typedef itk::Image<unsigned short, 3> UnsignShortImageType;bool labelVotingImageFilter(UnsignShortImageType* image, UnsignShortImageType* outputImage, unsigned short forUndecidedPixels)
{typedef itk::LabelVotingImageFilter<UnsignShortImageType, UnsignShortImageType> LabelVotingFilterType;typename LabelVotingFilterType::Pointer labelVotingFilter = LabelVotingFilterType::New();labelVotingFilter->SetInput(image);labelVotingFilter->SetLabelForUndecidedPixels(forUndecidedPixels);try{labelVotingFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = labelVotingFilter->GetOutput();return true;}

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

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

相關文章

【數據結構實踐課設】新生報道注冊管理信息系統

目錄 1.主要框架 2.寫入文件 3.讀取文件 4.注冊學生信息 5.增加學生信息 6.刪除學生信息 7.按姓名查詢 8.按班級查詢 9.按專業查詢 10.打印學生信息 11.完整代碼 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高興與大家相識&#xff0c;希望我的博客能對你有所…

git commit語義規范

合理的應當如 [header]fix(core): remove ....(#33949) These .... RP Close #33949(可選) Header可選 代碼類 新增功能(feat) 修復缺陷(fix) 改進性能(perf) 格式化代碼(style) 優化代碼(refactor) 非代碼類 更新測試代碼(test) 部署相關變更(ci) 文檔類變更(do…

【Linux】第二十七站:內存管理與文件頁緩沖區

文章目錄 一、物理內存和磁盤交換數據的最小單位二、操作系統如何管理內存三、文件的頁緩沖區四、基數樹or基數&#xff08;字典樹&#xff09;五、總結 一、物理內存和磁盤交換數據的最小單位 我們知道系統當中除了進程管理、文件管理以外&#xff0c;還有內存管理 內存的本質…

思科最新版Cisco Packet Tracer 8.2.1安裝

思科最新版Cisco Packet Tracer 8.2.1安裝 一. 注冊并登錄CISCO賬號二. 下載 Cisco Packet Tracer 8.2.1三. 安裝四. 漢化五. cisco packet tracer教學文檔六. 正常使用圖 前言 這是我在這個網站整理的筆記,有錯誤的地方請指出&#xff0c;關注我&#xff0c;接下來還會持續更新…

[香橙派]orange pi zero 3 燒錄Ubuntu系統鏡像——無需HDMI數據線安裝

一、前言 本文我們將介紹如何使用orange pi zero 3 安裝Ubuntu系統&#xff0c;本文相關步驟均參考自開發手冊。 二、實施準備 根據開發手冊中所提到的&#xff0c;我們應該擁有如下配件: 1.orange pi zero 3 開發板 2.TF 卡——最小 8GB 容量的 class10 級或以上的高速閃迪卡。…

鴻蒙OS應用開發之語句

在程序開發中&#xff0c;已經有上面的運算符和數據類型了&#xff0c;可以滿足了大部的需求&#xff0c;但是這些程序還是比較簡單的計算和邏輯運算&#xff0c;如果需要復雜的計算和邏輯處理&#xff0c;就需要采用復雜邏輯程序塊來處理了&#xff0c;也就是復雜條件語句才能…

nn.Sequential|nn.ModuleDict|nn.ModuleList 詳解

文章目錄 1、簡介2、三者之間的區別3、如何讓nn.ModuleList 和nn.ModuleDict實現推理3.1 方案1: 實現forward函數3.2 方案2: 將nn.ModuleList 和nn.ModuleDict轉換為nn.Sequential4、nn.ModuleDict、nn.ModuleList 的區別5、nn.ModuleList 、 nn.ModuleDict 與 Python list、…

模型 心流

本系列文章 主要是 分享模型&#xff0c;涉及各個領域&#xff0c;重在提升認知。完全投入其中。 1 心流的應用 1.1 優秀運動員的心流體驗 邁克爾喬丹&#xff08;Michael Jordan&#xff09;&#xff1a;籃球之神喬丹在比賽中經常進入心流狀態&#xff0c;他曾表示&#xff…

DIY手工藝作坊網站建設的作用如何

我國文化悠久流長&#xff0c;很多手工藝品制作技術放在如今依然有很高的需求度&#xff0c;加之現代新增的技藝&#xff0c;樣式多且藝術性強&#xff0c;比如常見的陶器手工制作技術&#xff0c;當然還有更多。 而對相關作坊來說&#xff0c;除了藝術傳承外&#xff0c;還需…

接觸剛性環境任務下的機器人力控(阻抗)性能測試

內涵 接觸剛性環境任務下的機器人力控&#xff08;阻抗&#xff09;性能測試旨在評估機器人在與剛性物體交互時的性能表現。這種測試通過調整機器人的控制參數&#xff0c;如期望剛度和期望阻尼等&#xff0c;并分析記錄的數據&#xff0c;旨在確保機器人能夠在執行任務時保持…

短劇分銷小程序/APP開發:開啟短劇收益時代

今年&#xff0c;短劇火爆出圈&#xff0c;市場規模將達至200億元至300億元。國內全全平臺付費短劇日充值金額為6000萬元&#xff0c;短劇作為一種“快餐式”文化迅速爆火。 短劇契合了觀眾娛樂時間碎片化的發展趨勢&#xff0c;相比于傳統的電視劇&#xff0c;短劇節奏快、劇…

Nacos源碼解讀10——配置中心的客戶端怎么處理服務端推送的配置信息變更

自動裝配 SpringBoot 自動裝配機制 加載 WEB/INF spring.factories org.springframework.cloud.bootstrap.BootstrapConfiguration\ com.alibaba.cloud.nacos.NacosConfigBootstrapConfigurationjava Configuration(proxyBeanMethods false) ConditionalOnProperty(name &q…

MongoDB的連接數據庫,創建、刪除數據庫,創建、刪除集合命令

本文主要介紹MongoDB的連接數據庫&#xff0c;創建、刪除數據庫&#xff0c;創建、刪除集合命令。 目錄 MongoDB連接數據庫連接到本地 MongoDB 實例連接到遠程 MongoDB 實例 MongoDB創建和刪除數據庫MongoDB創建和刪除集合創建集合刪除集合 MongoDB連接數據庫 連接 MongoDB 數…

P1317 低洼地題解

題目 一組數&#xff0c;分別表示地平線的高度變化。高度值為整數&#xff0c;相鄰高度用直線連接。找出并統計有多少個可能積水的低洼地&#xff1f; 如圖&#xff1a;地高變化為 [0,1,0,2,1,2,0,0,2,0]。 輸入輸出格式 輸入格式 兩行&#xff0c;第一行n, 表示有n個數。第…

Spark DataFrame和Dataset使用例子

文章目錄 1、基本操作1.1、創建SparkSession1.2、創建DataFrames1.3、創建Dataset操作1.4、運行sql查詢1.5、創建全局臨時視圖1.6、創建Datasets1.7、與rdd進行互操作1.7.1、使用反射推斷模式1.7.2、以編程方式指定模式 2、完整的測試例子 1、基本操作 1.1、創建SparkSession …

openGauss學習筆記-151 openGauss 數據庫運維-備份與恢復-物理備份與恢復之gs_basebackup

文章目錄 openGauss學習筆記-151 openGauss 數據庫運維-備份與恢復-物理備份與恢復之gs_basebackup151.1 背景信息151.2 前提條件151.3 語法151.4 示例151.5 從備份文件恢復數據 openGauss學習筆記-151 openGauss 數據庫運維-備份與恢復-物理備份與恢復之gs_basebackup 151.1 …

NeuralKG運行備忘

環境配置&#xff1a; conda create -n neuralkg python3.8 conda activate neuralkg pip install torch1.9.1cu111 -f https://download.pytorch.org/whl/torch_stable.html pip install dgl-cu111 dglgo -f https://data.dgl.ai/wheels/repo.html pip install neuralkg! co…

基于java swing 藥品銷售管理系統

大家好&#xff0c;我是DeBug&#xff0c;很高興你能來閱讀&#xff01;作為一名熱愛編程的程序員&#xff0c;我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里&#xff0c;我將會結合實際項目經驗&#xff0c;分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

短視頻賬號剪輯矩陣+無人直播系統源頭開發

抖去推爆款視頻生成器&#xff0c;通過短視頻矩陣、無人直播&#xff0c;文案引流等&#xff0c;打造實體商家員工矩陣、用戶矩陣、直播矩陣&#xff0c;輔助商家品牌曝光&#xff0c;團購轉化等多功能賦能商家拓客引流。 短視頻矩陣通俗來講就是批量剪輯視頻和批量發布視頻&am…

Multisim電路仿真軟件使用教程

安裝直接參考這篇文章&#xff1a;Multisim 14.0安裝教程 軟件管家公眾號里有很多軟件&#xff0c;需要的可以去找下然后安裝&#xff0c;這里用的是14.0版本。 這里有個大神的詳細教程&#xff0c;可以參考&#xff1a; Multisim軟件使用詳細入門教程&#xff08;圖文全解&…