• 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类。

    执行结果如下:

  • 相关阅读:
    计算机原理 发展简史
    计算机原理 系统构成
    网络工程师级考试大纲
    软件工程师能力要求
    数据库主体在该数据库中拥有架构,无法删除解决方法
    【转】时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
    Rabbit mq订阅方式获取消息并可设置持久化
    OpenGL 核心技术之立方体贴图
    ArcGIS Engine问答:为什么地理数据库中不能产生同名要素类
    Cocos2d-X中的声音和音效
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14241506.html
Copyright © 2020-2023  润新知