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