SIFT--FPGA实现之降采样

3.1  高斯金字塔的构建

尺度空间在实现时使用高斯金字塔表示,高斯金字塔的构建分为两部分:

1. 对图像做不同尺度的高斯模糊;

2. 对图像做降采样(隔点采样)

图像的金字塔模型是指,将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金子塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔共n 层。金字塔的层数根据图像的原始大小和塔顶图像的大小共同决定,其计算公式如下:

 (3-3)

其中MN 为原图像的大小,t为塔顶图像的最小维数的对数值。如,对于大小为512*512的图像,金字塔上各层图像的大小如表3.1 所示,当塔顶图像为4*4 时,n=7,当塔顶图像为2*2 时,n=8

下采样实现:可以采样隔行隔列取值。

  

DOWN SAMPLE降采样

 

隔点采样  VS实现程序

 

//隔点采样

void DownSample(constMat& src, Mat& dst)

{

//  resize(src, dst, Size(src.cols/2, src.rows/2),0, 0, CV_INTER_NN);

 

    if(src.channels()!= 1)

        return;

 

    if(src.cols<=1 || src.rows <=1)

    {

        src.copyTo(dst);

        return;

    }

 

    dst.create((int)(src.rows/2),(int)(src.cols/2), src.type());

//cout<<"--"<<dst.rows<<" " <<dst.cols << "--"<<endl;

 

    pixel_t* srcData = (pixel_t*)src.data;

    pixel_t* dstData = (pixel_t*)dst.data;

 

    int srcStep= src.step/sizeof(srcData[0]);

    int dstStep= dst.step/sizeof(dstData[0]);

 

    int m = 0, n= 0;

    for(int j = 0; j < src.cols; j+=2, n++)

    {

        m = 0;

        for(int i = 0; i < src.rows; i+=2, m++)

        {

            pixel_t sample = *(srcData + srcStep* i + src.channels() * j);

       

            //防止当图像长宽不一致时,长宽为奇数时,m,n越界

            if(m< dst.rows && n < dst.cols)

            {

                *(dstData + dstStep * m +dst.channels() * n) = sample;

       

            }

        }

    }

 

}

 

降采样实现方法1:

ram缓存整幅图像,然后进行行列采集。这种实现方法会占用大量的ram资源,而且和我之前的高斯滤波模块按周期输出不符。不采纳

降采样实现方法2:

如下图所示隔行隔点采样,也就是第一行数据不要,采集第二行数据,第三行数据不要采集第四行数据,也就是说偶数行有效,这样就完成了隔行采样,然后再进行隔列采样。实现方法是用一行ram大小的简单双口ram实现。这样在一个时钟下就可以完成隔行隔列采样。实现代码如下:

always @(posedge clk) begin  ///ram读状态机

            if(rst) begin

                                     addrb<= 4'd0; temp<=0; count<=1;enb <= 1'b0; end

                   elsebegin 

             if(r_data) begin

                    count <= count +1;

                    if(count==3'd2) begin

                      addrb <= addrb + 1 ; enb <=1'b1;temp<=temp+1; count<=1; end //enb <= 1'b1;

                    end

                   end

  end

 图中所示256*256 lena图像

实现效果比较:

Matlab降采样和硬件降采样实现数据比较分析:

 

从图可以所有的数据都一致。

 

效果比较:

 

matlab 降采样实现

硬件实现

 

到此,降采样设计完成。


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA高斯滤波器是一种利用FPGA(现场可编程门阵列)来实现高斯滤波器功能的方法。高斯滤波器是一种非常常用的图像处理滤波器,可用于图像的平滑处理和噪声消除。 使用FPGA实现高斯滤波器有以下几个优势。首先,FPGA具有并行处理能力,可以同时处理多个像素点,提高图像处理的速度。其次,FPGA的硬件逻辑可通过编程进行灵活调整和优化,根据不同的应用需求进行定制化设计。此外,FPGA具有低功耗和可重构性的特点,适合于嵌入式系统中的应用。 实现FPGA高斯滤波器的基本原理是通过离散化的高斯核来对图像进行卷积计算。高斯核是一个矩阵,其数值按照高斯分布曲线确定,用于对图像中的每个像素点进行加权平均。在FPGA中,可以将高斯核的权重系数存储在内存中,通过FPGA的逻辑单元,对输入的图像数据进行并行计算和加权平均,得到平滑处理后的图像结果。 实现FPGA高斯滤波器时,需要考虑的因素包括高斯核的尺寸和卷积计算的速度。高斯核的尺寸越大,平滑效果越明显,但计算复杂度也会增加。因此,需要根据具体应用场景的需求来选择合适的高斯核尺寸。而计算速度则可以通过FPGA的并行处理能力和优化算法来提高。 总之,FPGA高斯滤波器是一种通过FPGA实现图像平滑处理的方法,具有并行处理能力、灵活性和低功耗等优势。通过离散化的高斯核卷积计算,可以对图像进行有效的去噪和平滑处理,广泛应用于图像处理和计算机视觉领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值