【ITK庫學習】使用itk庫進行圖像濾波ImageFilter:幾何變換:翻轉、重采樣(未完)

目錄

  • 1、itkFlipImageFilter 圖像翻轉濾波器
  • 2、itkResampleImageFilter 重采樣圖像濾波器

1、itkFlipImageFilter 圖像翻轉濾波器

該類的主要功能是使輸入數據在用戶指定的軸上進行翻轉。

翻轉軸通過函數SetFlipAxes(array) 設置,其中輸入是FixArray<bool,ImageDimension>。 圖像在 array[i] 為 true 的軸上翻轉。

就網格坐標而言,圖像在輸入圖像的最大可能區域內翻轉,因此,輸出圖像的 LargestPossibleRegion與輸入圖像相同。

就幾何坐標而言,輸出原點是圖像相對于坐標軸翻轉的。

常用的成員函數

  • Set/GetFlipAxes():設置/獲取要翻轉的軸, 圖像沿著array[i]為true的軸翻轉,默認為 false
  • Set/GetFlipAboutOrigin():設置/獲取計算的輸出原點,如果FlipAboutOrigin為“On”,則翻轉將圍繞軸的原點發生,如為“false”則翻轉將圍繞軸的中心發生,默認為“On”
  • FlipAboutOriginOn/Off():同上

示例代碼

#include "itkImage.h"
#include "itkFlipImageFilter.h"typedef itk::Image<short, 3> ShortImageType;bool flipImageFilter(ShortImageType* image, ShortImageType* outImage)
{typename FlipFilterType::FlipAxesArrayType flipArray;flipArray[0] = true;      //沿x軸翻轉flipArray[1] = false;flipArray[2] = false;typedef itk::FlipImageFilter<ShortImageType>  FlipFilterType;typename FlipFilterType::Pointer flipFilter = FlipFilterType::New();flipFilter->SetInput(image);flipFilter->SetFlipAxes(flipArray);flipFilter->SetFlipAboutOrigin(false);   //On:圍繞圓點進行翻轉,false:圍繞軸中心進行翻轉,默認為“On”//flipFilter->FlipAboutOriginOn();       //與SetFlipAboutOrigin功能一樣//flipFilter->FlipAboutOriginOff();try{flipFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outImage = flipFilter->GetOutput();return true;
}

2、itkResampleImageFilter 重采樣圖像濾波器

該類通過坐標變換對圖像進行重新采樣,并通過插值函數對圖像進行插值

該類是根據輸入和輸出圖像的類型進行模板化的,

請注意,插值器函數的選擇可能很重要,該函數通過**SetInterpolator()**進行設置。 默認為 LinearInterpolateImageFunction<InputImageType, TInterpolatorPrecisionType>,這對于普通醫學圖像來說是合理的。 然而,一些合成圖像的像素是從有限的指定集合中提取的, 比如一個掩模,它指示將大腦分割成少量的組織類型,對于這樣的圖像,一般不在不同的像素值之間進行插值,NearestNeighborInterpolateImageFunction<InputImageType, TCoordRep> 會是更好的選擇。

如果樣本是從圖像域外部獲取的,則默認行為是使用默認像素值。 如果需要不同的行為,可以使用 SetExtrapolator() 設置外推器函數

應設置輸出圖像的輸出信息(間距、大小和方向),該信息具有單位間距、零原點和同一方向的正常默認值,輸出信息可以從參考圖像獲取;如果提供了參考圖像并且UseReferenceImage 為“On”,則將使用參考圖像的間距、原點和方向。重采樣是在空間坐標中執行,而不是像素/網格坐標。

由于此過濾器生成的圖像與其輸入的大小不同,因此它需要重寫ProcessObject中定義的多個方法,以便正確管理管道執行模型。 特別是,此過濾器重寫 ProcessObject::GenerateInputRequestedRegion() 和 ProcessObject::GenerateOutputInformation()。

此過濾器亦可實現多線程過濾器,使用DynamicThreadedGenerateData() 方法來實現。

常用的成員函數

  • Set/GetInterpolator():設置/獲取插值器函數,默認值為 LinearInterpolateImageFunction,其他選項:NearestNeighborInterpolateImageFunction(對于二進制蒙版和其他具有少量可能像素值的圖像很有用)和 BSplineInterpolateImageFunction(提供更高階的插值)
  • SetExtrapolator():設置/獲取外推器函數,默認值為 DefaultPixelValue,其他選項:NearestNeighborExtrapolateImageFunction
  • SetDefaultPixelValue():當設置/獲取變換后的像素位于圖像外部的像素值,默認為 0
  • GetOutputStartIndex():獲取輸出最大可能區域的起始索引
  • Set/GetSize():設置/獲取輸出圖像的大小
  • Set/GetOutputDirection():設置/獲取輸出方向余弦矩陣
  • Set/GetOutputOrigin():設置/獲取輸出圖像的原點
  • Set/GetOutputSpacing():設置/獲取輸出圖像的像素間距
  • SetOutputParametersFromImage():根據此圖像設置輸出參數的輔助方法
  • Set/GetTransformInput():設置/獲取用于重采樣的坐標變換,注意,這必須在物理坐標中,并且它是輸出到輸入的變換,默認情況下,過濾器使用身份轉換,如果不想使用默認的Identity轉換,則在嘗試運行過濾器之前,必須在此處提供不同的轉換
  • UseReferenceImageOn/Off():打開/關閉是否應使用指定的參考圖像來定義輸出信息
  • Set/GetUseReferenceImage():同上true:On,false:Off
  • Set/GetReferenceImage():設置用于定義輸出信息的參考圖像,默認情況下,輸出信息通過 SetOutputSpacing、SetOutputOrigin 和 SetOutputDirection 或 SetOutputParametersFromImage 方法指定,此方法可用于指定要從中復制像素信息的圖像,必須設置UseReferenceImageOn才能使用參考圖像

坐標變換
恒等變換:輸出圖像點(x,y,x)的像素值 = 輸入圖像點(x,y,z)的像素值,點坐標均為同一個空間坐標。

非恒等:當輸入輸出圖像的原點Orign和間距Space相同時,從輸出空間到輸入空間的點映射,(-30,-50,-10)的變換,指輸出圖像點(x,y,x)的像素值=輸入圖像點(x-30,y-50,z-10)的像素值。

恒等變換計算公式

輸出圖像參數:
原點 orignOut = {orignOut0,orignOut1,orignOut2}
間距 spaceOut = {spaceOut0,spaceOut1,spaceOut2}
尺寸大小 size= {sizeOut0,sizeOut1,sizeOut2}

輸出圖像參數:
原點 orignIn = {orignIn0,orignIn1,orignIn2}
間距 spaceIn={spaceIn0,space1In,spaceIn2}
尺寸大小sizeIn ={sizeIn0,sizeIn1,sizeIn2}

求像素值:
輸出圖像點I[3] = {X, Y, Z}的像素將于空間坐標點 P 相關聯

P 的坐標值:P[3] = {X*spaceOut0+orignOut0, Y*spaceOut1+orignOut1, Z*spaceOut2+orignOut2}

P 點在輸入圖像對應的點 Q 坐標值為:Q[3] = {(P[0]-orignIn0)/spaceIn0, (P[1]-orignIn1)/spaceIn1, (P[1]-orignIn1)/spaceIn1}

如果Q不是整數坐標,那么輸出圖像點 I 的像素值 = 輸入圖像中圍繞非整數標記 Q 插入值來計算的。

示例代碼

#include "itkImage.h"
#include "itkAffineTransform.h"
#include "itkNearestNeighborInterpolateImageFunction.h"
#include "itkResampleImageFilter.h"typedef itk::Image<short, 3> ShortImageType;
typedef itk::Image<float, 3> FloatImageType;bool resampleImageFilter(ShortImageType* image, FloatImageType* outImage)
{double space[3] = { 1,1,1 };double orign[3] = { 0,0,0 };ShortImageType::SizeType size = { 300,300,300 };typedef itk::ResampleImageFilter<ShortImageType, FloatImageType>  ResampleFilterType;typename ResampleFilterType::Pointer resampleFilter = ResampleFilterType::New();resampleFilter->SetInput(image);//使用用來表示空間坐標類型和圖像維度來定義變換類型,默認的設置變換參數來表示恒等變換typedef itk::AffineTransform<double, 3> TransformType;typename TransformType::Pointer transform = TransformType::New();//typename TransformType::OutputVectorType translation;//translation[0] = -30;//translation[1] = -50;//translation[2] = -10;//transform->Translate(translation);transform->SetIdentity();resampleFilter->SetTransform(transform);    //使用用來表示空間坐標類型和圖像類型來定義校對機類型typedef itk::NearestNeighborInterpolateImageFunction<ShortImageType, double> NNInterpolateType;typename NNInterpolateType::Pointer interpolate = NNInterpolateType::New();resampleFilter->SetInterpolator(interpolate);//輸出參數設置resampleFilter->SetDefaultPixelValue(0);resampleFilter->SetOutputSpacing(space);resampleFilter->SetOutputOrigin(orign);resampleFilter->SetSize(size);try{resampleFilter->Update();}catch (itk::ExceptionObject& ex){//讀取過程發生錯誤std::cerr << "Error: " << ex << std::endl;return false;}outImage = resampleFilter->GetOutput();return true;
}

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

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

相關文章

UML圖的各種類型以及軟件設計師考試考察的方式

UML建模 前言 常見的UML的類型 UML 比前兩題是更難的&#xff08;略高&#xff0c;但是學會就可以了。前兩題是&#xff1a;數據流圖&#xff0c;數據庫的設計&#xff09;&#xff0c;因為UML圖有很多類型&#xff1a;用例圖&#xff0c;類圖與對象圖&#xff0c;順序圖&…

3_CSS層疊樣式表基礎

第3章-CSS層疊樣式表基礎 學習目標(Objective) 掌握標簽選擇器的使用掌握類選擇器的使用了解id選擇器和通配符選擇器掌握font屬性和color屬性的應用 1.HTML的局限性 如果要改變下高度或者變一個顏色&#xff0c;就需要大量重復操作 總結&#xff1a; HTML滿足不了設計者的需…

Emacs之dired模式重新綁定鍵值v(一百三十一)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…

uniapp實戰 —— 輪播圖【數字下標】(含組件封裝,點擊圖片放大全屏預覽)

組件封裝 src\components\SUI_Swiper2.vue <script setup lang"ts"> import { ref } from vue const props defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) > {activeIndex.value e.detail.cur…

Python——數據容器

數據容器操作的異同點 項目列表list元組tuple字符串str集合set字典dict元素數量支持多個支持多個支持多個支持多個支持多個元素類型任意任意僅字符任意key&#xff1a;除字典外任意類型&#xff1b;value&#xff1a;任意類型下標索引支持支持支持不支持不支持重復元素支持支持…

yarn link使用(npm link)

使用場景 前端開發中&#xff0c;兩個項目相互依賴時&#xff0c;使用yarn link(npm link)鏈接 例如&#xff1a;A項目依賴于本司自己的UI庫B&#xff0c;當我們修改了UI庫B中的某些代碼時&#xff0c;需本地驗證后再發布到私服&#xff0c;此時A項目與UI項目B通過yarn link連…

數據可視化:解鎖企業經營的智慧之道

在現代企業管理中&#xff0c;數據可視化已經成為了一項重要的工具。它不僅僅是簡單地展示數據&#xff0c;更是提供了深入理解數據、做出更明智決策的方法。作為一名可視化設計從業人員&#xff0c;我經手過一些企業自用的數據可視化項目&#xff0c;今天就來和大家聊聊數據可…

數字化升級,智慧醫療新時代——醫院陪診服務的技術創新

在信息技術飛速發展的今天&#xff0c;醫療服務正迎來數字化升級的新時代。本文將探討如何通過先進技術的應用&#xff0c;為醫院陪診服務注入更多智慧元素&#xff0c;提升患者和家屬的醫療體驗。 1. 創新醫療預約系統 # Python代碼演示醫療預約系統的簡單實現 class Medic…

輸入框的透明度影響placeholder的透明度怎么解決

有一個需求是需要寫如上圖所示的輸入框。 首先想到的是調整輸入的透明度 <div class"inputDiv"><img src"./images/search.png" /><input type"text" class"myInput" placeholder"請輸入標題關鍵字"/> &…

飛天使-linux操作的一些技巧與知識點

命令行光標移動到行首行尾 ctrl a 跳到首 ctrl e 跳到尾/etc/passwd rpm 包格式 RPM&#xff08;Red Hat Package Manager&#xff09;是一種常用的Linux軟件包管理系統&#xff0c;它使用特定的命名規則來標識和命名軟件包。RPM包的名稱格式通常遵循以下規則&#xff1a;…

Qt基礎-修改Qt Creator界面字體

Qt Creator設計時字體太小,有時需要自定義一下,本文講解如何修改Qt Creator界面字體。 一、創建樣式文件 創建CSS文件,定義名稱為custom-style.css 編寫內容: QWidget { font: 12pt "Microsoft YaHei"; }QPlainTextEdit { font: 12pt "Microsoft YaHei&…

FPGA時序分析與約束(0)——目錄與傳送門

一、簡介 關于時序分析和約束的學習似乎是學習FPGA的一道分水嶺&#xff0c;似乎只有理解了時序約束才能算是真正入門了FPGA&#xff0c;對于FPGA從業者或者未來想要從事FPGA開發的工程師來說&#xff0c;時序約束可以說是一道躲不過去的坎&#xff0c;所以這個系列我們會詳細介…

Python的sort()與sorted()排序函數的區別

文章目錄 一、工具二、需求三、簡單的使用例子四、原理分析Timsort算法主要特點&#xff1a;Timsort算法的工作原理&#xff1a;sort() 方法和 sorted() 函數的差異&#xff1a; 五、Python中的單例實現簡單示例 一、工具 Python 3.10.0 pycharm 2022 二、需求 最近做項目的…

微服務學習:RestTemplateWebClient發起的http請求實現遠程調用

http請求做遠程調用是與語言無關的調用&#xff0c;只要知道對方的ip,端口&#xff0c;接口路徑&#xff0c;請求參數即可 啟動類中配置&#xff1a; Beanpublic RestTemplate restTemplate(){return new RestTemplate();} Sevice中書寫方法 get Autowiredprivate RestTemp…

2023-2024 年重慶市職業院校技能大賽 高職組“軟件測試”賽項樣題

2023-2024 年重慶市職業院校技能大賽 高職組“軟件測試”賽項樣題 單元測試要求分析、代碼設計、設計測試數據、編寫測試腳本和 測試執行等&#xff1b;測試計劃、測試報告文檔設計與編寫&#xff1b;Web 端測試用例 設計、測試執行和 Bug 記錄&#xff1b; 自動化測試要求分析…

點擊按住說話按鈕事件有延遲

問題原因&#xff1a; 該問題原因是由于系統的某些手勢 delaysTouchesBegan 屬性為 YES&#xff0c;當按鈕處在某些特定位置時觸摸事件會先被這些系統的手勢攔截&#xff0c;系統不響應才會繼續分發&#xff0c;而按鈕的 UIControlEventTouchDown 事件是需要立即響應的&#xf…

Python數據處理的六種方式總結,Python零基礎學習

文章目錄 前言1、dedup()去重并排序2、traverse()拆分嵌套數組3、filter()數據篩選4、groupby()分組運算5、select()遍歷結果集6、sort()數據排序 總結 前言 在 Python 的數據處理方面經常會用到一些比較常用的數據處理方式&#xff0c;比如pandas、numpy等等。 今天介紹的這…

vue圖片預覽 90度旋轉

要在 Vue 3 中實現點擊按鈕讓圖片旋轉 90 度&#xff0c;你可以使用 CSS 轉換和 Vue 的事件處理來完成。這里是一個基本的示例&#xff1a; 首先&#xff0c;在你的組件的模板中&#xff0c;添加一個按鈕和一個應用轉換的圖像&#xff1a; <template> <div> <…

使用粗糙貼圖制作粗紋皮革手提包3D模型

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…

UniGui使用CSS優化PageControl

如題直接上代碼 .x-tab-bar-default-top{background-image:none!important;background-color:#FFF !important;border-color:#f0f0f0 !important;border-left:none!important;border-right:none!important}.x-tab-bar-strip-default{border-color:#f0f0f0 !important;backgrou…