图像降采样原理_降采样滤波

图像降采样原理_降采样滤波转自:http://www.lofter.com/postentry?from=search&permalink=1cb3111d_6ee95871、先说说这两个词的概念: 降采样

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

转自:http://www.lofter.com/postentry?from=search&permalink=1cb3111d_6ee9587

1、先说说这两个词的概念: 

降采样,即是采样点数减少。对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中 
每行每列每隔k个点取一个点组成一幅图像。降采样很容易实现. 

升采样,也即插值。对于图像来说即是二维插值。如果升采样系数为k,即在原图n与n+1两点之间插入k-1个点,使其构成k分。二维插值即在每行插完之后对于每列也进行插值。 

插 值的方法分为很多种,一般主要从时域和频域两个角度考虑。对于时域插值,最为简单的是线性插值。除此之外,Hermite插值,样条插值等等均可以从有关 数值分析书中找到公式,直接代入运算即可。对于频域,根据傅里叶变换性质可知,在频域补零等价于时域插值。所以,可以通过在频域补零的多少实现插值运 算。 

2、实现 

其实在matlab中自带升采样函数(upsample)和降采样函数(downsample),读者可以查找matlab的帮助文件详细了解这两个函数。在这里,我重新写如下: 

%======================================================== 

%   Name: usample.m 

%   功能:升采样 

%   输入:采样图片 I, 升采样系数N 

%   输出:采样后的图片Idown 

%   author:gengjiwen    date:2015/5/10 

%======================================================== 

function Iup = usample(I,N) 

[row,col] = size(I); 

upcol = col*N; 

upcolnum = upcol – col; 

uprow = row*N; 

uprownum = uprow -row; 

If = fft(fft(I).’).’;     %fft2变换 

Ifrow = [If(:,1:col/2) zeros(row,upcolnum) If(:,col/2 +1:col)];   %水平方向中间插零 

                                                                                                   %补零之后,Ifrow为 row*upcol                                                                

Ifcol = [Ifrow(1:row/2,:);zeros(uprownum,upcol);Ifrow(row/2 +1:row,:)];   %垂直方向补零 

Iup = ifft2(Ifcol); 

end 

%======================================================== 

%   Name: dsample.m 

%   功能:降采样 

%   输入:采样图片 I, 降采样系数N 

%   输出:采样后的图片Idown 

%   author:gengjiwen    date:2015/5/10 

%======================================================== 

function Idown = dsample(I,N) 

[row,col] = size(I); 

drow = round(row/N); 

dcol = round(col/N); 

Idown = zeros(drow,dcol); 

p =1; 

q =1; 

for i = 1:N:row 

    for j = 1:N:col 

         Idown(p,q) = I(i,j); 

         q = q+1; 

    end 

    q =1; 

    p = p+1; 

end 

end 

% =========================================== 

% 测试升采样和降采样的程序 

%  author:gengjiwen , date:2015/05/10 

%  备注:测试完毕! 

%============================================ 

clear; 

close all; 

I = imread(‘test1.jpg’); 

I = rgb2gray(I); 

figure(1); 

imagesc(I); 

title(‘原图像’); 

% 图像降采样 

 figure; 

for ii = 2:2:8 

 Idown = dsample(I,ii); 

 subplot(2,2,ii/2); 

 imagesc(Idown); 

 str = [‘downsample at N = ‘ num2str(ii)]; 

 title(str); 

end 

% 图像升采样 

 figure; 

for ii = 2:2:8 

 Iup =usample(I,ii); 

 subplot(2,2,ii/2); 

 imagesc(abs(Iup)); 

 str = [‘upsample at N = ‘ num2str(ii)]; 

 title(str); 

end 

测试结果如下: 

图像降采样原理_降采样滤波

  

图像降采样原理_降采样滤波

  

图像降采样原理_降采样滤波

 3、结果分析 

降采样没什么可说的,其实在matlab中可以很方便的用冒号运算符实现,具体可以查看下matlab自带函数downsample的实现。 

对 于升采样,这里用了频域方法实现。将原图像进行二维傅里叶变换,之后在变换后的中间补零插值,再反变换回时域。根据傅里叶变换性质可知,此时的时域插值核 sinc函数的形式,对于二维,应是 二维sinc()函数。由于sinc函数的旁瓣比较大,故在升采样后的图像中会存在振铃现象。读者可以观察上面的实现结果图片。如果想减小这种情况,则可 以对其进行频域加窗。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167777.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 好玩的100个网站收藏游戏_电脑上怎么把网址收藏

    好玩的100个网站收藏游戏_电脑上怎么把网址收藏1.最强大的“免费电子书”下载区——新浪电子书共享http://ishare.iask.sina.com.cn/(数十万册哦,全是免费滴!)2.性能很好的免费网络硬盘——云盘网(10G免费超大空间哦,支持共享,可加密文件)http://www.diskes.com/3.爱酷美剧http://www.icoolen.com/film4.传说中“天涯

    2022年10月7日
    7
  • tlb表项_谷物对人体的好处

    tlb表项_谷物对人体的好处TLB:TranslationLookasideBuffer.根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理器要在主内存寻址时,不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,TLB就是负责将虚拟内存地址翻译成实际的物理内存地址,而CPU寻址时会优先在TLB中进行寻址。处理器的性能就和寻址的命中率有很大的关系。映射机制必须使一个程序能断言某个地址在其自己的进程空间或地址空间

    2025年5月28日
    6
  • SPSS聚类分析——一个案例演示聚类分…「建议收藏」

    SPSS聚类分析——一个案例演示聚类分…「建议收藏」本文实际为2010年5月8日完成并发布的,浏览量:7199,评论数:5。http://hi.baidu.com/datasoldier/item/37abae32474bf7f1a884289f在百度新版空间升级过程中,该篇文章丢失,今天,重新更新并发布,作为SPSS案例分析系列的第17篇文章。同时希望百度新版空间能不断完善,在升级过程中尽量避免出现文章丢失的现象。案例数据源:有20种

    2022年10月18日
    9
  • 怎么添加窗口小工具_vc可视化编程

    怎么添加窗口小工具_vc可视化编程原文地址:http://www.cnblogs.com/carekee/articles/1751805.html(转载者注)推荐在MFC中加入BCG,而不是适用BCG建立工程,因为BCG对中文的支持不是很好,到时候会很麻烦。本文以MDI应用程序为例说明如何在已有的VC++工程中使用BCG界面库,我的开发环境为VS2003(在VC6.0下同样适用)。  1,将BCG/BCGCB

    2022年10月8日
    3
  • Your branch and ‘XXX’ have diverged

    Your branch and ‘XXX’ have diverged目前没什么好办法,我的做法是新建一条branch,删掉这条有问题的branch。。(这份code最好保存一份)

    2025年6月26日
    4
  • 解决:为什么VMware虚拟机配置连上网了,电脑重启后,联网需要重置?!看这里

    解决:为什么VMware虚拟机配置连上网了,电脑重启后,联网需要重置?!看这里

    2021年5月28日
    191

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号