VTK_MODULE_INIT(vtkRenderingOpenGL2);VTK_MODULE_INIT(vtkInteraction_理想高通滤波:外白内黑,">
赞
踩
高通滤波与低通滤波正好相反,是频率图像的高频部分通过抑制低频部分。在图像中图像的边缘对应高频分量,因此高通滤波的效果图是图像锐化。同样是最简单的高通滤波是理想的高通滤波器。通过设置一频率阈值,将高于阈值的频率通过,而低于预知的低频部分设置为0.
#include "Test.h" #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); #include <vtkSmartPointer.h> #include <vtkJPEGReader.h> #include <vtkImageFFT.h> #include <vtkImageIdealHighPass.h> #include <vtkImageRFFT.h> #include <vtkImageCast.h> #include <vtkImageExtractComponents.h> #include <vtkRenderer.h> #include <vtkImageActor.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkInteractorStyleImage.h> int main(int argc, char* argv[]) { vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New(); reader->SetFileName("data/Lena.jpg"); reader->Update(); vtkSmartPointer<vtkImageFFT> fftFilter = vtkSmartPointer<vtkImageFFT>::New(); fftFilter->SetInputConnection(reader->GetOutputPort()); fftFilter->Update(); vtkSmartPointer<vtkImageIdealHighPass> highPassFilter = vtkSmartPointer<vtkImageIdealHighPass>::New(); highPassFilter->SetInputConnection(fftFilter->GetOutputPort()); highPassFilter->SetXCutOff(0.1); highPassFilter->SetYCutOff(0.1); highPassFilter->Update(); vtkSmartPointer<vtkImageRFFT> rfftFilter = vtkSmartPointer<vtkImageRFFT>::New(); rfftFilter->SetInputConnection(highPassFilter->GetOutputPort()); rfftFilter->Update(); vtkSmartPointer<vtkImageExtractComponents> ifftExtractReal = vtkSmartPointer<vtkImageExtractComponents>::New(); ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort()); ifftExtractReal->SetComponents(0); vtkSmartPointer<vtkImageCast> castFilter = vtkSmartPointer<vtkImageCast>::New(); castFilter->SetInputConnection(ifftExtractReal->GetOutputPort()); castFilter->SetOutputScalarTypeToUnsignedChar(); castFilter->Update(); // vtkSmartPointer<vtkImageActor> originalActor = vtkSmartPointer<vtkImageActor>::New(); originalActor->SetInputData(reader->GetOutput()); vtkSmartPointer<vtkImageActor> erodedActor = vtkSmartPointer<vtkImageActor>::New(); erodedActor->SetInputData(castFilter->GetOutput()); // double leftViewport[4] = { 0.0, 0.0, 0.5, 1.0 }; double rightViewport[4] = { 0.5, 0.0, 1.0, 1.0 }; vtkSmartPointer<vtkRenderer> leftRenderer = vtkSmartPointer<vtkRenderer>::New(); leftRenderer->AddActor(originalActor); leftRenderer->SetViewport(leftViewport); leftRenderer->SetBackground(1.0, 1.0, 1.0); leftRenderer->ResetCamera(); vtkSmartPointer<vtkRenderer> rightRenderer = vtkSmartPointer<vtkRenderer>::New(); rightRenderer->AddActor(erodedActor); rightRenderer->SetViewport(rightViewport); rightRenderer->SetBackground(1.0, 1.0, 1.0); rightRenderer->ResetCamera(); // vtkSmartPointer<vtkRenderWindow> rw = vtkSmartPointer<vtkRenderWindow>::New(); rw->SetSize(640, 320); rw->AddRenderer(leftRenderer); rw->AddRenderer(rightRenderer); rw->SetWindowName("IdealHighPassExample"); vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New(); vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New(); rwi->SetInteractorStyle(style); rwi->SetRenderWindow(rw); rwi->Start(); return 0; }
同低频滤波一样,首先将读入图像vtkImageFFT转换到频率空间,定义 vtkImageIdealHighPass对象,并通过SetCutOff()和SetYOff()设置X和Y方向的截止频率。然后通过vtkImageRFFT将处理后的图像转换到空域中,得到高通滤波图像。为了显示的需要,还需要提取图像分量和数据类型的转换。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。