日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

5.10 图像运算

發(fā)布時(shí)間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.10 图像运算 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


5.10.1 數(shù)學(xué)運(yùn)算

vtkImageMathematics提供了基本的一元和二元數(shù)學(xué)操作。根據(jù)不同的操作,需要一個(gè)或者兩個(gè)輸入圖像。二元數(shù)字操作要求兩個(gè)輸入圖像具有相同的像素?cái)?shù)據(jù)類(lèi)型,顏色分量。當(dāng)兩個(gè)圖像大小不同時(shí),輸出圖像的范圍為兩個(gè)輸入圖像范圍的并集,并且原點(diǎn)和像素間隔與第一個(gè)輸入圖像保持一致。

?

1:? vtkSmartPointer<vtkImageCanvasSource2D>imageSource =

??2:????vtkSmartPointer<vtkImageCanvasSource2D>::New();

??3:??imageSource->SetNumberOfScalarComponents(3);

??4:??imageSource->SetScalarTypeToUnsignedChar();

??5:?? imageSource->SetExtent(0,4, 0, 4, 0, 0);

??6:??imageSource->SetDrawColor(100.0, 0, 0);

??7:?? imageSource->FillBox(0, 4,0, 4);

??8:?? imageSource->Update();

??9:??

?10:?? vtkSmartPointer<vtkImageMathematics>imageMath =

?11:????vtkSmartPointer<vtkImageMathematics>::New();

?12:??imageMath->SetOperationToMultiplyByK();

?13:??imageMath->SetConstantK(2.0);

?14:??imageMath->SetInputConnection(imageSource->GetOutputPort());

?15:?? imageMath->Update();

?

上例中生成了一副圖像,圖像中繪制了一個(gè)暗紅色矩形;然后定義vtkImageMathematics對(duì)象,并調(diào)用SetOperationToMultiplyByK()函數(shù)來(lái)將圖像中所有的像素值乘以一個(gè)常數(shù)K,這里常數(shù)值為2.0,下圖為輸出結(jié)果。

?

圖5.23 圖像數(shù)學(xué)運(yùn)算

?

vtkImageMathematics中支持的二元數(shù)學(xué)操作有:

SetOperationToAdd:兩個(gè)圖像對(duì)應(yīng)像素加法運(yùn)算

SetOperationToSubtract:兩個(gè)圖像對(duì)應(yīng)像素減法運(yùn)算

SetOperationToMultiply:兩個(gè)圖像對(duì)應(yīng)像素相乘運(yùn)算

SetOperationToDivide:兩個(gè)圖像對(duì)應(yīng)像素相除運(yùn)算

SetOperationToConjugate:將兩個(gè)標(biāo)量圖像對(duì)應(yīng)像素組合為共軛復(fù)數(shù)

SetOperationToComplexMultiply:兩個(gè)圖像對(duì)應(yīng)像素復(fù)數(shù)乘法運(yùn)算

SetOperationToMin:取兩個(gè)圖像中對(duì)應(yīng)像素較小值

SetOperationToMax:取兩個(gè)圖像中對(duì)應(yīng)像素較大值

一元操作有:

SetOperationToInvert:圖像像素值取倒數(shù)運(yùn)算

SetOperationToSin:圖像像素值正弦運(yùn)算

SetOperationToCos:圖像像素值余弦運(yùn)算

SetOperationToExp:圖像像素值自然指數(shù)運(yùn)算

SetOperationToLog:圖像像素值自然對(duì)數(shù)運(yùn)算

SetOperationToAbsoluteValue:圖像像素值取絕對(duì)值

SetOperationToSquare:圖像像素值平方運(yùn)算

SetOperationToSquareRoot:圖像像素值平凡根運(yùn)算

SetOperationToATAN:圖像像素值正切運(yùn)算

SetOperationToATAN2:圖像像素值反正切運(yùn)算

SetOperationToMultiplyByK:圖像像素值乘以常數(shù)K,需要先調(diào)用SetConstantK()設(shè)置K值

SetOperationToAddConstant:圖像像素值加上常數(shù)K,需要先調(diào)用SetConstantK()設(shè)置K值

SetOperationToReplaceCByK:將圖像中像素為C的像素值替換為K,需要先調(diào)用SetConstantK()和SetConstantC設(shè)置K和C值

5.10.2 邏輯運(yùn)算

vtkImageLogic接收一個(gè)或者兩個(gè)圖像進(jìn)行布爾邏輯運(yùn)算,該類(lèi)主要支持與(AND),或(OR),異或(XOR),與非(NAND),或非(NOR)和非(NOT)。當(dāng)選擇一元操作符時(shí),只對(duì)第一個(gè)輸入圖像有效。 當(dāng)選擇二元操作符時(shí),兩個(gè)輸入圖像的類(lèi)型必須一致。下面看一個(gè)實(shí)例。

1:? vtkSmartPointer<vtkImageCanvasSource2D>imageSource1 =

??2:????vtkSmartPointer<vtkImageCanvasSource2D>::New();

??3:?? imageSource1->SetScalarTypeToUnsignedChar();

??4:??imageSource1->SetNumberOfScalarComponents(1);

??5:?? imageSource1->SetExtent(0,100, 0, 100, 0, 0);

??6:??imageSource1->SetDrawColor(0.0);

??7:??imageSource1->FillBox(0,100,0,100);

??8:?? imageSource1->SetDrawColor(255);

??9:??imageSource1->FillBox(20,60,20,60);

?10:?? imageSource1->Update();

?11:??

?12:??vtkSmartPointer<vtkImageCanvasSource2D> imageSource2 =

?13:????vtkSmartPointer<vtkImageCanvasSource2D>::New();

?14:?? imageSource2->SetNumberOfScalarComponents(1);

?15:??imageSource2->SetScalarTypeToUnsignedChar();

?16:??imageSource2->SetExtent(0, 100, 0, 100, 0, 0);

?17:??imageSource2->SetDrawColor(0.0);

?18:??imageSource2->FillBox(0,100,0,100);

?19:?? imageSource2->SetDrawColor(255.0);

?20:??imageSource2->FillBox(40,80,40,80);

?21:?? imageSource2->Update();

?22:??

?23:??vtkSmartPointer<vtkImageLogic> imageLogic =

?24:????vtkSmartPointer<vtkImageLogic>::New();

?25:??imageLogic->SetInput1(imageSource1->GetOutput());

?26:??imageLogic->SetInput2(imageSource2->GetOutput());

?27:??imageLogic->SetOperationToXor();

?28:??imageLogic->SetOutputTrueValue(128);

?29:?? imageLogic->Update();

?

上例中首先生成了兩個(gè)二值圖像,兩個(gè)圖像中前景為兩個(gè)部分重疊矩形。然后定義vtkImageLogic對(duì)象,并設(shè)置兩個(gè)圖像為輸入,SetOperationToXor()設(shè)置邏輯操作算子為異或操作,并且SetOutputTrueValue()設(shè)置當(dāng)兩個(gè)圖像對(duì)應(yīng)像素值異或結(jié)果為真時(shí)的輸出像素值,其執(zhí)行結(jié)果如下,可以看成兩個(gè)矩形的重疊部分像素值相同,因此輸出為0;矩形的不重疊部分像素值一個(gè)為0,一個(gè)為255,因此異或結(jié)果為真,那么輸出值為128。

?

圖5.24 圖像邏輯運(yùn)算

vtkImageLogic設(shè)置邏輯運(yùn)算的函數(shù)有:

SetOperationToAnd():邏輯與操作

SetOperationToOr():邏輯或操作

SetOperationToXor():邏輯異或

SetOperationToNand():邏輯與非

SetOperationToNor():邏輯或非

SetOperationToNot():邏輯非

5.11 圖像二值化

二值圖像和label圖像是圖像分割中經(jīng)常用到的兩種圖像。二值圖像的每個(gè)像素只有兩種可能的取值,例如0或者255。通常0代表圖像的背景,而255代碼圖像前景。圖像二值化是最簡(jiǎn)單的圖像分割模型。設(shè)置一個(gè)灰度閾值,將圖像中閾值以下的像素值設(shè)置為背景,閾值以上的像素值設(shè)置為前景,即可得當(dāng)一副二值圖像。在VTK中可以通過(guò)vtkImageThreshold類(lèi)實(shí)現(xiàn)圖像二值化。

?

1:? ????vtkSmartPointer<vtkJPEGReader>reader =

??2:?????????vtkSmartPointer<vtkJPEGReader>::New();

??3:????? reader->SetFileName("lena2.jpg" );

??4:????? reader->Update();

??5:??

??6:?????vtkSmartPointer<vtkImageThreshold> thresholdFilter =

??7:?????????vtkSmartPointer<vtkImageThreshold>::New();

??8:?????thresholdFilter->SetInputConnection(reader->GetOutputPort());

??9:????? thresholdFilter->ThresholdByUpper(100);

?10:?????thresholdFilter->SetInValue(255);

?11:?????thresholdFilter->SetOutValue(0);

?11:?????thresholdFilter->Update();

?

vtkImageThreshold類(lèi)實(shí)現(xiàn)圖像的閾值化處理,其功能不僅僅是生成二值圖像。在本例中,我們以圖像二值化操作為例來(lái)介紹該類(lèi)。vtkImageThreshold類(lèi)中定義了兩個(gè)閾值,UpperThreshold和LowerThreshold,這兩個(gè)值將圖像的值域劃分為三部分:大于UpperThreshold,小于LowerThreshold,以及位于LowerThreshold和UpperThreshold之間的三段。函數(shù)ThresholdByUpper()設(shè)置為取大于UpperThreshold的灰度范圍為有效范圍,并通過(guò)函數(shù)SetInValue()來(lái)設(shè)置該范圍內(nèi)的輸出值,SetOutValue()設(shè)置范圍外的輸出值,本例中取大于100所有像素輸出值為255,而小于100的像素值為0。該例的結(jié)果執(zhí)行如下。

?

圖5.25 圖像二值化

另外還有其他兩種方式,ThresholdByLower()取小于LowerThreshold的范圍為有效范圍;ThresholdBetween()取LowerThreshold和UpperThreshold之間的部分為有效范圍。另外SetInValue()和SetOutValue()如果不設(shè)置的話,圖像會(huì)按原圖輸出。可以通過(guò)該類(lèi)來(lái)實(shí)現(xiàn)圖像數(shù)據(jù)范圍的截?cái)嗖僮鳌?/p>

對(duì)于二值圖像前景由多個(gè)對(duì)象組成,而每個(gè)對(duì)象是一個(gè)連通分量,對(duì)象之間不存在連通關(guān)系。在處理圖像時(shí),需要將不同的對(duì)象分別提取出來(lái)或者將不同對(duì)象賦一個(gè)label值,這樣得到的圖像成為label圖像。目前VTK中沒(méi)有提取二值圖像連通分量的filter以及相應(yīng)的對(duì)二值圖像label化的filter。如果要實(shí)現(xiàn)該功能,可以考慮與ITK相結(jié)合。


==========歡迎轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)保留該聲明信息==========

版權(quán)歸@東靈工作室所有,更多信息請(qǐng)?jiān)L問(wèn)東靈工作室


教程系列導(dǎo)航:http://blog.csdn.net/www_doling_net/article/details/8763686

================================================


總結(jié)

以上是生活随笔為你收集整理的5.10 图像运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。