zl程序教程

您现在的位置是:首页 >  其它

当前栏目

halcon-傅里叶变换

变换 HALCON 傅里叶
2023-09-27 14:28:41 时间

傅里叶变换是空域到频域的变换方法

用途:一般用于对出现频率高的像素点的分析以及噪声的去除

频率图特点:图像中心是频率为0的原点,由内到外频率越来越高; 期中颜色变换激烈的地方对应高频成分,如边缘;颜色变换不大的地方对应低频

1.jpg

 

 

在HDevelop中

dev_update_off()
read_image(Image,'D:/bb/tu/1.jpg')

rgb1_to_gray(Image,Image1)

fft_image (Image1, ImageFFT)
*傅里叶变换
*参数2:傅里叶变换图像
get_image_size (ImageFFT, Width, Height)

dev_open_window(0,100,Width, Height,'black',WindowHandle)
dev_display(ImageFFT)

********傅里叶变换图像的应用*********
area_center (ImageFFT, Area, Row, Column)
gen_circle (Circle, Row, Column, 20)

paint_region (Circle, ImageFFT, ImageResult, 0, 'fill')
*参数4用0填充,目的就是屏蔽掉一些低频

fft_image_inv (ImageResult, ImageFFTInv)
*傅里叶逆变换
*参数1:输入图像
*参数2:保存变换后的图像


get_image_size (ImageFFTInv, Width1, Height1)
dev_open_window(0,100,Width1, Height1,'black',WindowHandle1)
dev_display(ImageFFTInv)

*说明:通过逆变换后的图像可以看到,一些低频图像(背景)被去掉了

 

 


在Qt Creator中

    HObject  ho_Image, ho_Image1, ho_ImageFFT, ho_Circle;
    HObject  ho_ImageResult, ho_ImageFFTInv;
    HTuple  hv_Width, hv_Height, hv_WindowHandle;
    HTuple  hv_Area, hv_Row, hv_Column, hv_Width1, hv_Height1;
    HTuple  hv_WindowHandle1;
    ReadImage(&ho_Image, "D:/bb/tu/1.jpg");

    Rgb1ToGray(ho_Image, &ho_Image1);

    FftImage(ho_Image1, &ho_ImageFFT);
    //傅里叶变换
    //参数2:傅里叶变换图像
    GetImageSize(ho_ImageFFT, &hv_Width, &hv_Height);

    SetWindowAttr("background_color","black");
    OpenWindow(0,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle);
    HDevWindowStack::Push(hv_WindowHandle);
    if (HDevWindowStack::IsOpen())
      DispObj(ho_ImageFFT, HDevWindowStack::GetActive());

    //*******傅里叶变换图像的应用*********
    AreaCenter(ho_ImageFFT, &hv_Area, &hv_Row, &hv_Column);
    GenCircle(&ho_Circle, hv_Row, hv_Column, 20);

    PaintRegion(ho_Circle, ho_ImageFFT, &ho_ImageResult, 0, "fill");
    //参数4用0填充,目的就是屏蔽掉一些低频

    FftImageInv(ho_ImageResult, &ho_ImageFFTInv);
    //傅里叶逆变换
    //参数1:输入图像
    //参数2:保存变换后的图像


    GetImageSize(ho_ImageFFTInv, &hv_Width1, &hv_Height1);
    SetWindowAttr("background_color","black");
    OpenWindow(0,100,hv_Width1,hv_Height1,0,"visible","",&hv_WindowHandle1);
    HDevWindowStack::Push(hv_WindowHandle1);
    if (HDevWindowStack::IsOpen())
      DispObj(ho_ImageFFTInv, HDevWindowStack::GetActive());

    //说明:通过逆变换后的图像可以看到,一些低频图像(背景)被去掉了