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

    1.高斯滤波

    高斯平滑的原理类似于均值滤波。均值滤波模板的系数都是一样的,而高斯平滑则是需要根据像素与模板中心的距离来定义权重。权重的计算方法是采用高斯分布,离中心越远,权重越小。
    下面是一个利用Gauss滤波进行图像平滑的实例:
     1 #include <vtkAutoInit.h>
     2 VTK_MODULE_INIT(vtkRenderingOpenGL);
     3  
     4 #include <vtkSmartPointer.h>
     5 #include <vtkJPEGReader.h>
     6 #include <vtkImageCast.h>
     7 #include <vtkImageData.h>
     8 #include <vtkImageGaussianSmooth.h>
     9 #include <vtkImageActor.h>
    10 #include <vtkRenderer.h>
    11 #include <vtkRenderWindow.h>
    12 #include <vtkRenderWindowInteractor.h>
    13 #include <vtkInteractorStyleImage.h>
    14 //#include <vtkImageEllipsoidSource.h>
    15  
    16 int main()
    17 {
    18     vtkSmartPointer<vtkJPEGReader> reader =
    19         vtkSmartPointer<vtkJPEGReader>::New();
    20     reader->SetFileName("lena.jpg");
    21     reader->Update();
    22  
    23     vtkSmartPointer<vtkImageGaussianSmooth> gaussianSmoothFilter =
    24         vtkSmartPointer<vtkImageGaussianSmooth>::New();
    25     gaussianSmoothFilter->SetInputConnection(reader->GetOutputPort());
    26     gaussianSmoothFilter->SetDimensionality(2);
    27     gaussianSmoothFilter->SetRadiusFactor(5); //设置模板范围
    28     gaussianSmoothFilter->SetStandardDeviation(3);//正态分布/高斯分布标准差
    29     gaussianSmoothFilter->Update();
    30  
    31     vtkSmartPointer<vtkImageActor> originalActor =
    32         vtkSmartPointer<vtkImageActor>::New();
    33     originalActor->SetInputData(reader->GetOutput());
    34  
    35     vtkSmartPointer<vtkImageActor> smoothedActor =
    36         vtkSmartPointer<vtkImageActor>::New();
    37     smoothedActor->SetInputData(gaussianSmoothFilter->GetOutput());
    38  
    39     double originalViewport[4] = { 0.0, 0.0, 0.5, 1.0 };
    40     double smoothedViewport[4] = { 0.5, 0.0, 1.0, 1.0 };
    41  
    42     vtkSmartPointer<vtkRenderer> originalRenderer =
    43         vtkSmartPointer<vtkRenderer>::New();
    44     originalRenderer->SetViewport(originalViewport);
    45     originalRenderer->AddActor(originalActor);
    46     originalRenderer->ResetCamera();
    47     originalRenderer->SetBackground(1.0, 0, 0);
    48  
    49     vtkSmartPointer<vtkRenderer> gradientMagnitudeRenderer =
    50         vtkSmartPointer<vtkRenderer>::New();
    51     gradientMagnitudeRenderer->SetViewport(smoothedViewport);
    52     gradientMagnitudeRenderer->AddActor(smoothedActor);
    53     gradientMagnitudeRenderer->ResetCamera();
    54     gradientMagnitudeRenderer->SetBackground(1.0, 1.0, 1.0);
    55  
    56     vtkSmartPointer<vtkRenderWindow> rw =
    57         vtkSmartPointer<vtkRenderWindow>::New();
    58     rw->AddRenderer(originalRenderer);
    59     rw->AddRenderer(gradientMagnitudeRenderer);
    60     rw->SetSize(640, 320);
    61     rw->SetWindowName("Smooth by Gaussian");
    62  
    63     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
    64         vtkSmartPointer<vtkRenderWindowInteractor>::New();
    65     vtkSmartPointer<vtkInteractorStyleImage> style =
    66         vtkSmartPointer<vtkInteractorStyleImage>::New();
    67     rwi->SetInteractorStyle(style);
    68     rwi->SetRenderWindow(rw);
    69     rwi->Initialize();
    70     rwi->Start();
    71  
    72     return 0;
    73 }

    vtkImageGaussianSmooth类默认是执行三维高斯滤波;

    SetDimensionality()根据需要设置相应的维数;
    SetRadiusFactor()用于设置高斯模板的大小,当超出该模板的范围时,系数取0;
    SetStandardDeviation()用于设置高斯分布函数的标准差。
    高斯平滑效果如下所示:
  • 相关阅读:
    正则表达式匹配整数和小数
    解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题
    ActiveMQ 消息持久化到数据库(Mysql、SQL Server、Oracle、DB2等)
    C# CLR20R3 程序终止的几种解决方案
    彻底消除wine中文乱码,QQ,kugoo等等....
    Fedora如何添加第三方软件源?
    [转]Fedora 下安装NVIDIA显卡驱动(使用后无法进入图形界面)
    向fedora添加rpmfusion源
    [转]Java 8 Optional类深度解析(null处理)
    [转载]深入理解Java 8 Lambda
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14241498.html
Copyright © 2011-2022 走看看