zoukankan      html  css  js  c++  java
  • 如果对直方图进行频域滤波会怎样

    原直方图:

    进行一维离散余弦变换,公式如下:

    参考代码如下:

    View Code
    private int[] fourier() {
    
                int[] ft = new int[256];
                int N = 256;
    
                double Cu = 1;
                for(int u = 0; u < N; u++){
    
                    if(u == 0){
                        Cu = 1.0/Math.Sqrt(2);
                    }
    
                    double sum = 0;
                    for(int x = 0; x < N;x++){
                        sum += grays[x]*Math.Cos((2*x + 1) * u *Math.PI/(2*N));
                    }
                    double temp = Cu * Math.Sqrt(2.0 / N) * sum;
                    ft[u] = (int)temp;
                }
               return ft;
    
            }

    反变换的公式如下:

    参考代码如下:

    View Code
    private int[] invertFourier() {
    
                int[] inverseft = new int[256];
                int N = 256;
    
                for (int x = 0; x < N; x++)
                {
                    double sum = 0;
                    sum =(1/ Math.Sqrt(2.0)) * ditong[0];
                    for (int u = 1; u < N; u++)
                    {
    
                        sum += ditong[u] * Math.Cos((2 * x + 1) * u * Math.PI / (2 * N));
                    }
                    double temp = Math.Sqrt(2.0 / N) * sum;
                    inverseft[x] = Math.Abs((int)temp);
                }
                return inverseft;
            }

    两式中,系数C(u)的取值按照如下规则:

    其中,u是频域变量,x是灰度值,f(x)是对应灰度值的统计量。

    将直方图进行DCT变换后,得到频谱图像如图:

    按照当初的设想,滤去频率高的部分,可以使波形平滑。

    低通

    假设使用理想低通滤波器,即,设定一个阈值D0,高于D0的部分的频率被抑制,低于D0的部分可以通过。

    假设D0为直流分量的0.618倍,则频域滤波及进行反DCT变换后的的效果为:

    如果将D0设为直流分量的0.5倍,则效果为:

    将D0设为直流分量的0.2倍,则效果为:

    将D0设为直流分量的0.1倍,则效果为:

     

    高通-按照个数取舍频率时

    如果对直方图曲线进行高通,那么会有如下效果:

    情况1:只保留直流分量时:

    情况2:保留直流分量,和前10个交流分量时:

    对比原直方图,可以看到已经出现了大致的轮廓:

    情况3:保留直流分量及前20个交流分量时:

    此时,形态就更接近原直方图了:

    情况4:保留直流分量及前30个交流分量时:

    情况5:保留直流分量及前50个交流分量时

    高通-按照频率大小进行取舍

    D0=0.9*直流分量时:

    D0=0.8*直流分量时:

    D0=0.5*直流分量时:

    D0=0.4*直流分量时:

    D0=0.3*直流分量时:

    D0=0.2*直流分量时:

    D0=0.1*直流分量时:

    D0=0.05*直流分量时:

  • 相关阅读:
    kendo ui 查找treelist里的子控件并设置是否显示的方法
    KendoUi下的DatePicker在谷歌浏览器上不能正常显示时间的解决方法
    asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录
    mysql批量更新数据,即:循环select记录然后更新某一字段
    Sql语句备份Sqlserver数据库
    3des用法示例,已测试
    制作Windows服务项目详细攻略
    利用好压在C#程序里实现RAR格式的压缩和解压功能
    winform里textBox无法获得焦点的解决方案
    Shell脚本批量重命名案例
  • 原文地址:https://www.cnblogs.com/elaron/p/2544639.html
Copyright © 2011-2022 走看看