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

目錄

  • 1、itkMeanImageFilter 均值濾波器
  • 2、itkMedianImageFilter 中值濾波器
  • 3、itkBinaryMedianImageFilter 二值中值濾波器
  • 4、擴展itkNeighborhood
  • 5、擴展itkNeighborhoodIterator
  • 6、擴展itkNeighborhoodOperator

領域濾波是一種信號處理方法,用于去除信號中的噪聲不相關信號,并保留感興趣的信號。它基于信號在不同頻率上的分布特性進行濾波處理。

根據濾波器的設計原理:時域濾波、頻域濾波。

時域濾波:在時間域上對信號進行濾波處理,圖像去噪可以使用:均值濾波、中值濾波、高斯濾波等。這些方法通過對信號在一段時間窗口內的采樣點進行處理,平滑信號或去除異常值。

頻域濾波:在頻率域上對信號進行濾波處理,常用方法有:傅里葉變換、離散余弦變換等。

1、itkMeanImageFilter 均值濾波器

該類主要功能是對圖像應用平均濾波器。

計算圖像,其中給定像素是對應輸入像素附近鄰域中像素的平均值,對領域內的奇異值很敏感

均值濾波器是線性濾波器系列之一。

示例代碼

#include "itkImage.h"
#include "itkMeanImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool meanImageFilter(ShortImageType* image, ShortImageType* outputImage)
{ShortImageType::SizeType indexRadius;indexRadius[0] = 1; // radius along xindexRadius[1] = 1; // radius along yindexRadius[2] = 1; // radius along ztypedef itk::MeanImageFilter<ShortImageType, ShortImageType> MeanFiterType;typename MeanFiterType::Pointer meanFilter = MeanFiterType::New();meanFilter->SetInput(image);meanFilter->SetRadius(indexRadius);try{meanFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = meanFilter->GetOutput();return true;
}

2、itkMedianImageFilter 中值濾波器

該類的作用是對圖像應用中值濾波器。

計算圖像,其中給定像素是對應輸入像素附近鄰域中像素的中值。中值濾波器是非線性濾波器之一。 它用于平滑圖像,而不會受到異常值或散粒噪聲的影響。

此濾波器對消除椒鹽噪聲更加有效。

此過濾器要求輸入像素類型提供運算符<()(小于可比較)。

示例代碼

#include "itkImage.h"
#include "itkMedianImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool medianImageFilter(ShortImageType* image, ShortImageType* outputImage)
{ShortImageType::SizeType indexRadius;indexRadius[0] = 1; // radius along xindexRadius[1] = 1; // radius along yindexRadius[2] = 1; // radius along ztypedef itk::MedianImageFilter<ShortImageType, ShortImageType> MedianFiterType;typename MedianFiterType::Pointer medianFilter = MedianFiterType::New();medianFilter->SetInput(image);medianFilter->SetRadius(indexRadius);try{medianFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = medianFilter->GetOutput();return true;
}

3、itkBinaryMedianImageFilter 二值中值濾波器

該類的作用相當于再一個二值圖像中應用中值濾波器。

該濾波器計算圖像時,其中輸出像素=其對應的輸入鄰域像素的中值。 對于二值圖像的情況,可以通過簡單地計算前景的鄰域值來獲得中值,即計算當前像素周圍ON/Off像素的數量來優化運行。

中值濾波器是非線性濾波器家族之一。它用于平滑圖像,而不會受到異常值或散粒噪聲的影響。

常用的成員函數

  • Set/GetRadius():設置/獲取用于計算中位數的鄰域半徑
  • Set/GetForegroundValue():設置/獲取與二進制輸入圖像上的前景關聯的值
  • Set/GetBackgroundValue():設置/獲取與二進制輸入圖像上的背景關聯的值

示例代碼

#include "itkImage.h"
#include "itkBinaryMedianImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool binaryMedianImageFilter(ShortImageType* image, ShortImageType* outputImage)
{ShortImageType::SizeType indexRadius;indexRadius[0] = 1; // radius along xindexRadius[1] = 1; // radius along yindexRadius[2] = 1; // radius along ztypedef itk::BinaryMedianImageFilter<ShortImageType, ShortImageType> BinaryMedianFilterType;typename MedianFiterType::Pointer bMedianFilter = MedianFiterType::New();bMedianFilter->SetInput(image);bMedianFilter->SetRadius(indexRadius);try{bMedianFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outputImage = bMedianFilter->GetOutput();return true;
}

4、擴展itkNeighborhood

用于存儲N維鄰域值的輕量級容器對象。

它是一個模板類,表示一個多維鄰域,其元素的類型由模板參數指定。它以一個中心索引和沿每個維度的偏移量為基礎描述了一個規則的鄰域形狀。

是其他幾個itk對象(例如 itk::NeighborhoodOperator 和 itk::NeighborhoodIterator)的基類,其目的是存儲值及其相對空間位置。

鄰域具有N維半徑,每個維度的半徑分別定義為鄰域從中心像素向外延伸的像素數。 例如,半徑為 2x3 的 2D Neighborhood 對象的邊長為 5x7,鄰域對象總是有一個明確的中心,因為它們的邊長總是奇數。

5、擴展itkNeighborhoodIterator

定義 itk::Image 上像素的局部N維鄰域的迭代。

此類是標準模板庫 (STL) 雙向迭代器概念對itk::Image對象內像素鄰域掩碼的松散擴展。 NeighborhoodIterator 基類定義了圖像上 N維鄰域掩模的簡單正向和反向迭代,可以使用Neighborhood作為鄰域形狀在給定輸入圖像中遍歷這個鄰域,它可以像訪問數組中的元素一樣訪問輸入圖像(掩碼)中的元素。

NeighborhoodIterators旨在封裝處理圖像鄰域的一些復雜性,必須在算法級別進行管理。 使用 NeighborhoodIterators來簡化對圖像執行幾何局部操作(例如,卷積和形態學操作)的算法的編寫,可以方便地對鄰域內的像素進行操作和計算。

6、擴展itkNeighborhoodOperator

定義所有鄰域運算符子類型的公共接口的虛擬類。

它屬于一個抽象基類,表示一個規則化的鄰域操作,它接受一個輸入像素和它的鄰域,然后輸出一個結果像素,規定了如何計算輸出像素。

它是一組像素值,可以應用于Neighborhood來執行用戶定義的操作(即卷積核、形態結構元素)。 NeighborhoodOperator本身就是一個專門的Neighborhood,具有根據用戶定義的參數生成其系數的功能。 由于該運算符是 Neighborhood 的子類,因此它是 Neighborhood 對象上定義的任何操作(卷積、內積等)中的有效操作數。

NeighborhoodOperator 是一個純虛擬對象,必須對其進行子類化才能使用,用戶的子類必須實現兩個方法:

(1)生成系數GenerateCoefficients——計算算子標量系數的算法。

(2) 填充Fill ——將標量系數放入算子的內存緩沖區中的算法(將它們在空間上排列在鄰域中)。

NeighborhoodOperator 支持“方向運算符”的概念。在此上下文中,方向運算符被定義為沿單個維度應用的運算符。 此類算子的示例包括方向導數和可分離過程(例如高斯平滑)的單獨方向分量。

NeighborhoodOperator 如何應用于數據取決于定義它的用戶。 運算符的一種可能用途是采用其內積與鄰域值來生成標量結果。 當應用于圖像中感興趣區域的連續鄰域時,該過程會影響卷積。

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

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

相關文章

★560. 和為 K 的子數組(自己做出來了)

560. 和為 K 的子數組 前綴和的知識。 如果要求i~j下標之間的元素和&#xff0c;用前綴和的話&#xff0c;應該是b[j] - b[i-1]&#xff0c;i處的值也應該包括。 所以這個題&#xff0c;前綴和數組就要比原數組整體向后平移一個單元格&#xff0c;不然在求0~n的和的時候沒法取…

在python中安裝庫,會有conda安裝,也會有pip安裝,conda與pip的區別是什么?

文章目錄 一、Conda是什么&#xff1f;二、pip是什么&#xff1f;三、pip與conda的區別&#xff1a;總結 一、Conda是什么&#xff1f; Conda是一個開源的包管理系統&#xff0c;它是Anaconda公司為Python和其他編程語言開發的。它主要用于數據科學和機器學習領域&#xff0c;…

【Vue】日常錯誤總結(持續更新)

日常遇到的小問題匯總, 內容小篇幅少的就全放這里了, 內容多的會在Vue專欄單獨分享~ 目錄 【Q】 el-form-item值為 null 或 undefined顯示““ 【Q】dialog內組件數據刷新總是延遲慢一拍 問題背景描述 解決方案 代碼簡單模擬 JS 【Q】el-input 不能輸入的解決辦法 方法…

Educational Codeforces Round 156 (Rated for Div. 2)補題

Sum of Three 題目大意&#xff1a;將一個正整數n分成3個不同的正整數x,y,z,保證三個數都不能整除3&#xff0c;如果無法實現就輸出NO. 思路&#xff1a;這個題實際上特別簡單&#xff0c;我們可以發現當n比較大的時候&#xff0c;我們可以從中取1&#xff0c;然后第二個數也…

【Java】Java環境以及EditPlus編輯器安裝與配置流程

要安裝和配置Java環境以及EditPlus編輯器&#xff0c;請按照以下步驟操作&#xff1a; ### 安裝Java Development Kit (JDK) 1. 訪問Java官方網站下載最新版本的JDK。 2. 運行下載的JDK安裝程序&#xff0c;并按照提示完成安裝。 3. 安裝完成后&#xff0c;記下JDK的安裝路徑&a…

perf與火焰圖-性能分析工具

參考鏈接 perf性能分析工具使用分享 如何讀懂火焰圖&#xff1f;-阮一峰 perf基本用法-record,report-知乎 火焰圖抓取 準備&#xff1a; centos安裝perf工具 dnf install perf下載火焰圖解析代碼 git clone https://github.com/brendangregg/FlameGraph.git抓取指定進程…

Orcal數據庫Schema理解、表分區理解

目錄 1 Schema1.1 Orcal數據庫示例1.2 MySQL數據庫示例 2 Orcal表分區2.1 創建表分區2.2 查看表分區2.3 查看指定分區數據 此前未了解過Schema的概念&#xff0c;僅知道Orcal數據庫比較側重這個概念&#xff0c;搜遍全網都&#xff0c;都是啰哩吧嗦的搬抄定義&#xff0c;特此在…

LeetCode算法題解(單調棧)|LeetCode503. 下一個更大元素 II、LeetCode42. 接雨水

一、LeetCode503. 下一個更大元素 II 題目鏈接&#xff1a;503. 下一個更大元素 II 題目描述&#xff1a; 給定一個循環數組 nums &#xff08; nums[nums.length - 1] 的下一個元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每個元素的 下一個更大元素 。 數字 x 的…

LIMoE:使用MoE學習多個模態

文章鏈接&#xff1a;Multimodal Contrastive Learning with LIMoE: the Language-Image Mixture of Experts 發表期刊&#xff08;會議&#xff09;: NeurIPS 2022 目錄 1.背景介紹稀疏模型 2.內容摘要Sparse Mixture-of-Experts ModelsContrastive LearningExperiment Analy…

Kubernetes入門筆記 ——(3)理解pod對象

為什么需要pod 最為熟知的一句話&#xff1a;pod是k8s的最小調度單位。剛開始聽到這句話時會想&#xff0c;已經有容器了&#xff0c;k8s為什么還要搞個pod出來&#xff1f;容器和pod是什么關系&#xff1f;容器的本質是進程&#xff0c;而k8s本質上類似操作系統。 熟悉Linux的…

SpringBoot系列之啟動成功后執行業務的方法歸納

SpringBoot系列之啟動成功后執行業務邏輯。在Springboot項目中經常會遇到需要在項目啟動成功后&#xff0c;加一些業務邏輯的&#xff0c;比如緩存的預處理&#xff0c;配置參數的加載等等場景&#xff0c;下面給出一些常有的方法 實驗環境 JDK 1.8SpringBoot 2.2.1Maven 3.2…

python dataframe 列中 字符串( ‘2815512706605‘)過大 轉不了float 用Decimal

from decimal import Decimaldf["accFillSz"] df["accFillSz"].apply(lambda x: Decimal(x)) 2815512706605這個值超出了Python中float類型的最大表示范圍,無法直接轉換為浮點數。 Python中float類型使用IEEE 754標準的64位雙精度浮點數表示,最大值大約為…

歐拉回路歐拉路【詳解】

1.引入 2.概念 3.解決方法 4.例題 5.回顧 1.引入 經典的七橋問題 哥尼斯堡是位于普累格河上的一座城市&#xff0c;它包含兩個島嶼及連接它們的七座橋&#xff0c;如下圖所示。 可否走過這樣的七座橋&#xff0c;而且每橋只走過一次&#xff1f; 你怎樣證明&#xff1f;…

【Linux top命令】

文章目錄 深入了解Linux top命令&#xff1a;實時監控系統性能1. 什么是top命令&#xff1f;2. 使用top命令3. top命令交互操作 深入了解Linux top命令&#xff1a;實時監控系統性能 1. 什么是top命令&#xff1f; top命令是一個用于實時監控系統性能的文本界面工具。它顯示當…

Linux上使用獨立顯卡Tesla T4(測試視頻壓縮)

背景 將視頻處理程序單獨部署至K8S之外&#xff0c;使用獨立GPU顯卡的一臺服務器上。 需事先對GPU性能做簡單測試。 已通過zabbix對Linux進行了系統資源監控。 已通過PrometheusGrafana對顯卡Tesla T4做了性能監控。 逐步補充&#xff0c;稍等 2023年12月6日 操作 查看當前…

鴻蒙Harmony開發初探

一、背景 9月25日華為秋季全場景新品發布會&#xff0c;余承東宣布鴻蒙HarmonyOS NEXT蓄勢待發&#xff0c;不再支持安卓應用。網易有道、同程旅行、美團、國航、阿里等公司先后宣布啟動鴻蒙原生應用開發工作。 二、鴻蒙Next介紹 HarmonyOS是一款面向萬物互聯&#xff0c;全…

[Linux] 基于LAMP架構安裝論壇

一、安裝Discuz論壇 1.1 創建數據庫&#xff0c;并進行授權 mysql -u root -p123CREATE DATABASE bbs; #創建一個數據庫GRANT all ON bbs.* TO bbsuser% IDENTIFIED BY admin123; #把bbs數據庫里面所有表的權限授予給bbsuser,并設置密碼admin123flush privileges; #刷新數據庫…

Java 中的抽象類與接口:深入理解與應用

文章目錄 什么是抽象類&#xff1f;什么是接口&#xff1f;抽象類和接口的使用場景抽象類和接口的區別結論 在 Java 編程語言中&#xff0c;抽象類和接口是兩種重要的機制&#xff0c;用于實現抽象化和多態性。這兩種機制都允許我們定義一種通用的類型&#xff0c;然后通過繼承…

數據結構——棧與棧排序

棧的特性 棧是一種遵循后進先出&#xff08;LIFO&#xff09;原則的數據結構。其基本操作包括&#xff1a; push&#xff1a;將元素添加到棧頂。pop&#xff1a;移除棧頂元素。peek&#xff1a;查看棧頂元素&#xff0c;但不移除。 棧排序的原理 棧排序的核心是使用兩個棧&…

[滲透測試學習] Devvortex - HackTheBox

文章目錄 信息搜集解題步驟提交flag 信息搜集 掃描端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.242發現80端口有http服務&#xff0c;并且是nginx服務 嘗試訪問web界面&#xff0c;發現跳轉到http://devvortex.htb/無法訪問 我們用vim添加該域名即可 sudo vim /etc/…