05-VTK在图像处理中的应用(5)

本文介绍了VTK在图像处理中的应用,特别是直方图统计和图像重采样。首先讲解了如何使用vtkImageAccumulate计算灰度图像和彩色图像的直方图,接着通过vtkImageShrink3D和vtkImageMagnify实现了图像的降采样和升采样。直方图统计涉及到灰度图像直方图的计算和显示,而图像重采样则用于调整图像的尺寸和清晰度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.8 直方图统计

5.8.1 灰度图像直方图

直方图统计是图像处理中的一个非常重要的操作。VTK中实现直方图统计功能的filter是vtkImageAccumulate。其将每个组分的数值范围划分为离散的间隔,然后统计每个灰度间隔上的像素数目。vtkImageAccumulate输入和输出都是vtkImageData类型,因此直方图也可以看做是一幅图像;对于输入图像的像素数据类型可以是任意的,但是最大支持3个组分像素类型,而输出图像的像素数据类型为int型。一个灰度图像的直方图为一个一维图像。首先来看一下怎么计算灰度图像直方图。

 

   1:     vtkSmartPointer<vtkJPEGReader> reader =

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

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

   4:     reader->Update();

   5:  

   6:     int bins = 16;

   7:  

   8:     vtkSmartPointer<vtkImageAccumulate> histogram =

   9:         vtkSmartPointer<vtkImageAccumulate>::New();

  10:     histogram->SetInput(reader->GetOutput());

  11:     histogram->SetComponentExtent(0, bins-1, 0, 0, 0, 0);

  12:     histogram->SetComponentOrigin(0, 0, 0);

  13:     histogram->SetComponentSpacing(256/bins, 0, 0);

  14:     histogram->Update();

  15:  

  16:     vtkSmartPointer<vtkIntArray> frequencies =

  17:         vtkSmartPointer<vtkIntArray>::New();

  18:  

  19:     frequencies->SetNumberOfComponents(1);

  20:     frequencies->SetNumberOfTuples(bins);

  21:     int* output = static_cast<int*>(histogram->GetOutput()->GetScalarPointer());

  22:  

  23:     for(int j = 0; j < bins; ++j)

  24:     {

  25:         frequencies->SetTuple1(j, *output++);

  26:     }

  27:  

  28:     vtkSmartPointer<vtkDataObject> dataObject =

  29:         vtkSmartPointer<vtkDataObject>::New();

  30:     dataObject->GetFieldData()->AddArray( frequencies );

  31:  

  32:     vtkSmartPointer<vtkBarChartActor> barChart =

  33:         vtkSmartPointer<vtkBarChartActor>::New();

  34:  

  35:     barChart->SetInput(dataObject);

  36:     barChart->SetTitle("Histogram");

  37:     barChart->GetPositionCoordinate()->SetValue(0.05,0.05,0.0);

  38:     barChart->GetPosition2Coordinate()->SetValue(0.95,0.95,0.0);

  39:     barChart->GetProperty()->SetColor(1,1,1);

  40:  

  41:     barChart->GetLegendActor()->SetNumberOfEntries(

  42:             dataObject->GetFieldData()->GetArray(0)->GetNumberOfTuples());

  43:     barChart->LegendVisibilityOff();

  44:     barChart->LabelVisibilityOff();

  45:  

  46:     double red[3] = {1, 0, 0 };

  47:     for(int i = 0; i < bins; ++i)

  48:     {

  49:         barChart->SetBarColor(i, red );

  50:     }

  51:  

  52:     vtkSmartPointer<vtkRenderer> renderer =

  53:         vtkSmartPointer<vtkRenderer>::New();

  54:     renderer->AddActor(barChart);

  55:  

  56:     vtkSmartPointer<vtkRenderWindow> renderWindow =

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值