zoukankan      html  css  js  c++  java
  • VTK 图像平滑_中值滤波器

    1.中值滤波

    vtkImageHybridMedian2D实现了对二维图像的中值滤波。其实现原理是,采用一个5x5的模板,逐次将模板中心对应于图像的每个像素上,将模板图像覆盖的像素的中值作为当前像素的输出值。

     1 #include <vtkAutoInit.h>
     2 VTK_MODULE_INIT(vtkRenderingOpenGL);
     3  
     4 #include <vtkSmartPointer.h>
     5 #include <vtkJPEGReader.h>
     6 #include <vtkImageData.h>
     7 #include <vtkImageCast.h>
     8 #include <vtkImageHybridMedian2D.h>
     9 #include <vtkImageActor.h>
    10 #include <vtkRenderer.h>
    11 #include <vtkRenderWindow.h>
    12 #include <vtkRenderWindowInteractor.h>
    13 #include <vtkInteractorStyleImage.h>
    14  
    15 int main(int argc, char* argv[])
    16 {
    17     vtkSmartPointer<vtkJPEGReader> reader =
    18         vtkSmartPointer<vtkJPEGReader>::New();
    19     reader->SetFileName("lena.jpg");
    20     reader->Update();
    21  
    22     vtkSmartPointer<vtkImageHybridMedian2D> hybridMedian =
    23         vtkSmartPointer<vtkImageHybridMedian2D>::New();
    24     hybridMedian->SetInputData(reader->GetOutput());
    25     hybridMedian->Update();
    26     ///
    27     vtkSmartPointer<vtkImageActor> originalActor =
    28         vtkSmartPointer<vtkImageActor>::New();
    29     originalActor->SetInputData(reader->GetOutput());
    30  
    31     vtkSmartPointer<vtkImageActor> hybridMedianActor =
    32         vtkSmartPointer<vtkImageActor>::New();
    33     hybridMedianActor->SetInputData(hybridMedian->GetOutput());
    34     /
    35     double originalViewport[4] = { 0.0, 0.0, 0.5, 1.0 };
    36     double hybridMedianViewport[4] = { 0.5, 0.0, 1.0, 1.0 };
    37  
    38     vtkSmartPointer<vtkRenderer> originalRenderer =
    39         vtkSmartPointer<vtkRenderer>::New();
    40     originalRenderer->SetViewport(originalViewport);
    41     originalRenderer->AddActor(originalActor);
    42     originalRenderer->ResetCamera();
    43     originalRenderer->SetBackground(1.0,0,0);
    44  
    45     vtkSmartPointer<vtkRenderer> hybridMedianRenderer =
    46         vtkSmartPointer<vtkRenderer>::New();
    47     hybridMedianRenderer->SetViewport(hybridMedianViewport);
    48     hybridMedianRenderer->AddActor(hybridMedianActor);
    49     hybridMedianRenderer->ResetCamera();
    50     hybridMedianRenderer->SetBackground(1.0, 1.0, 1.0);
    51     //
    52     vtkSmartPointer<vtkRenderWindow> rw =
    53         vtkSmartPointer<vtkRenderWindow>::New();
    54     rw->AddRenderer(originalRenderer);
    55     rw->AddRenderer(hybridMedianRenderer);
    56     rw->SetSize(640, 320);
    57     rw->Render();
    58     rw->SetWindowName("MedianFilterExample");
    59  
    60     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
    61         vtkSmartPointer<vtkRenderWindowInteractor>::New();
    62     vtkSmartPointer<vtkInteractorStyleImage> style =
    63         vtkSmartPointer<vtkInteractorStyleImage>::New();
    64     rwi->SetInteractorStyle(style);
    65     rwi->SetRenderWindow(rw);
    66     rwi->Initialize();
    67     rwi->Start();
    68  
    69     return 0;
    70 }

    该类使用非常简单,不需要用户设置任何参数。该方法能够有效的保持图像边缘,并对于椒盐噪声有较好的抑制作用。对于三维图像,则使用vtkImageHybridMedian3D类。

    执行结果如下:

  • 相关阅读:
    Git 处理tag和branch的命令
    手把手教您使用第三方登录
    iOS 中隐藏UITableView最后一条分隔线
    Android简易实战教程--第四十四话《ScrollView和HorizontalScrollView简单使用》
    iOS-改变UITextField的Placeholder颜色的三种方式
    react-native 关闭黄屏警告
    reactnative js onclick 模拟单击/双击事件
    reactnative 监听屏幕方向变化
    reactnative0.61.2 使用react-native-webrtc
    use react-navigation@2.18.2
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14241506.html
Copyright © 2011-2022 走看看