原-图像处理基础(二)图像的放大与缩小

最近邻插值法

其中

  • size(g(x))代表图像像素矩阵列宽
  • size(g(y))代表图像像素矩阵行高
  • scale 代表缩放倍数
\begin{matrix} 
f(x)=g(round(x),round(y)) \\ 
 round(x)=\frac {size(g(x))}{ scale}\\
 round(y)=\frac {size(g(y))}{ scale}\\
\end{matrix}

Matlab代码

%输入参数 源图像,放大倍数
function dst=imageNearestNeighbor(src,scale)
Row=size(src,1);  
Col=size(src,2);%图像行数和列数  
max_row=round(scale*Row);%求出变换后的坐标的最大值  
max_col=round(scale*Col);  
B=zeros(max_row,max_col,3);%定义变换后的图像  3表示3个通道(RGB)
for new_row=1:max_row
  for new_col=1:max_col
     x=round(new_row/scale);  
     y=round(new_col/scale);%最小临近法对图像进行插值  
     %处理边缘  
     if x==0 x=1;end  
     if y==0 y=1;end  
     if x>Row x=Row;end  %溢出处理
     if y>Col y=Col;end  %溢出处理
     B(i,j,:)=A(x,y,:);  %B(i,j)像素点对应A最近邻点A(x,y)
   end  
end  
B=uint8(B);%将矩阵转换成8位无符号整数   

OpenCV代码

//待更新

双线性插值

Matlab代码

%采用双线性内插值对图像进行缩放处理
%参数n表示缩放的倍数
function []=scale2(n)
ima=imread('test.jpg'); %读取原图像
ima=double(ima); %二维矩阵转为双精度类型
swh=size(ima); %获取原图像的宽高
sh=swh(:,1); %获取原图像的高
sw=swh(:,2); %获取原图像的宽
 
%"加墙"
ima2=zeros(sh+2,sw+2);
ima2(1,2:sw+1)=ima(1,:); %原图像上边加墙,灰度值与边界一致
ima2(sh+2,2:sw+1)=ima(sh,:); %原图像下边加墙,灰度值与边界一致
ima2(2:sh+1,2:sw+1)=ima; %将原图像赋值给中心部分
ima2(:,1)=ima2(:,2); %原图像左边加墙,灰度值与边界一致
ima2(:,sw+2)=ima2(:,sw+1); %原图像右边加墙,灰度值与边界一致
 
dw=sw*n; %计算缩放后的图像的宽
dh=sh*n; %计算缩放后的图像的高
 
dw1=round((sw+2)*n); %计算加墙后缩放的图像的宽
dh1=round((sh+2)*n); %计算加墙后缩放的图像的高
 
resIma1=zeros(dh1,dw1); %创建原图像的矩阵
 
%从不是“墙”的位置开始计算缩放后的图像的各点灰度值
%考虑缩小图像时,输入的缩放倍数是小数,需进行取整
start=round(n+1);
endI=round(dh+n);
endJ=round(dw+n);
 
for i=start:endI
    for j=start:endJ
        tx=i/n; %缩放后的图像坐标在原图像处的位置
        ty=j/n;
        tdx=tx-floor(tx); %得到小数坐标
        tdy=ty-floor(ty);
        %确定临近四个角的坐标
        %Q11点
        Q11x=tx-tdx;
        Q11y=ty-tdy;
        %Q12点
        Q12x=tx-tdx;
        Q12y=Q11y+1;
        %Q21点
        Q21x=Q11x+1;
        Q21y=Q11y;
        %Q22点
        Q22x=Q11x+1;
        Q22y=Q11y+1;
        %根据双线性内插算法,算出缩放后的图像在(i,j)点处的灰度值
        resIma1(i,j)=tdx*tdy*ima2(Q11x,Q11y)+(1-tdx)*tdy*ima2(Q12x,Q12y)+tdx*(1-tdy)*ima2(Q21x,Q21y)+(1-tdy)*(1-tdx)*ima2(Q22x,Q22y);
    end
end
resIma=resIma1(n+1:dh+n,n+1:dw+n); %截取除墙外的中心部分
resIma=uint8(resIma);
imshow(resIma); %显示缩放后的图像
end

OpenCV 代码

//待填坑

**附上一道很经典的 双线性插值 面试题 ** 已知Q12,Q22,Q11,Q21的坐标如图1,求P点的坐标

双三次插值

//笔者编程能力有限,待笔者好好研究研究。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

机器学习(十七) ——SVM进一步认识

机器学习(十七)——SVM进一步认识 (原创内容,转载请注明来源,谢谢) 注:这两天边看ng的svm视频,边看机器学习实战的书的svm代码,两边都看的云里雾里...

3278
来自专栏深度学习与计算机视觉

理解图像卷积操作的意义

在图像处理领域,我们经常能听到滤波,卷积之类的词,其实他们都可以看做一种图像的卷积操作,相对应的卷积核,卷积模板,滤波器,滤波模板,扫描窗其实也都是同一个东西。...

6016
来自专栏机器学习算法工程师

数据挖掘中的数据清洗方法大全

作者:章华燕 编辑:黄俊嘉 在数据挖掘领域,经常会遇到的情况是挖掘出来的特征数据存在各种异常情况,如数据缺失 、数据值异常 等。对于这些情况,如果不加以处理,那...

3445

Keras中神经网络模型的5阶段生命周期

使用Python的Keras库可以很容易创建和评测深度学习神经网络,但是您必须遵循严格的模型生命周期。

2999
来自专栏智能算法

FASTN如何快速的检测出角点

1. FASTN算法的动机 大部分特征检测算法的效果较好,但是达不到实时,因此提出FAST (Features from Accelerated Segment...

3367
来自专栏机器学习从入门到成神

机器学习之决策树(Decision Tree)及其Python代码实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

1011
来自专栏文武兼修ing——机器学习与IC设计

Deep-compression阅读笔记基本步骤相关分析总结

以上是Deep compression中所述的神经网络压缩方法,主要包括三个步骤:

1812
来自专栏企鹅号快讯

机器学习——SVM进一步认识

机器学习(十七) ——SVM进一步认识 (原创内容,转载请注明来源,谢谢) 注:这两天边看ng的svm视频,边看机器学习实战的书的svm代码,两边都看的云里雾里...

1936
来自专栏烂笔头

曲线点抽稀算法-Python实现

目录[-] 何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便。多余的数据一方面浪费了较多的存储空间,另一方面造成所要...

5206
来自专栏智能算法

KNN最近邻算法及其Python实现

k-NN是一种基本的分类和回归方法,用于分类时,算法思路较简单:通过计算不同特征之间的距离方法来得到最近的k个训练实例,根据k个实例的类别采用多数表决等方式进...

7857

扫码关注云+社区