数字图像处理-matlab图像内插

这篇具有很好参考价值的文章主要介绍了数字图像处理-matlab图像内插。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近邻插值

目标各像素点的灰度值代替源图像中与其最邻近像素的灰度值
参考博客
假设一个2X2像素的图片采用最近邻插值法需要放大到4X4像素的图片,右边该为多少?
数字图像处理-matlab图像内插
最近邻插值法坐标变换计算公式:
s r c X = d s t X ∗ ( s r c W i d t h / d s t W i d t h ) srcX=dstX*(srcWidth/dstWidth) srcX=dstX(srcWidth/dstWidth)
s r c Y = d s t Y ∗ ( s r c H e i g h t / d s t H e i g h t ) srcY=dstY*(srcHeight/dstHeight) srcY=dstY(srcHeight/dstHeight)
d s t X dstX dstX d s t Y dstY dstY为目标图像的某个像素的横纵坐标, d s t W i d t h dstWidth dstWidth d s t H e i g h t dstHeight dstHeight为目标图像的长与宽;
s r c W i d t h srcWidth srcWidth s r c H e i g h t srcHeight srcHeight为原图像的宽度与高度。
s r c X srcX srcX s r c Y v srcYv srcYv为目标图像在该点 ( d s t X , d s t Y ) (dstX,dstY) dstXdstY对应的原图像的坐标。
数字图像处理-matlab图像内插
右图为经过放大后的目标图像,?处的坐标为 ( 3 , 2 ) (3,2) (3,2),根据公式计算得到
s r c X = 3 ∗ ( 2 / 4 ) = 1.5 , s r c Y = 2 ∗ ( 2 / 4 ) = 1 srcX=3*(2/4)=1.5,srcY=2*(2/4)=1 srcX=3(2/4)=1.5srcY=2(2/4)=1
故?处的像素应该为原图像中的 ( 1.5 , 1 ) (1.5,1) (1.5,1)像素的值,但是像素坐标没有小数,一般采用四舍五入取最邻,所以最终的结果为 ( 2 , 1 ) (2,1) (2,1),对应原图像的橙色。
其他类比得到放大后的图像:
数字图像处理-matlab图像内插

f=imread('lena.jpg');
N=0.8;
[row,col,color]=size(f);
row_n=round(row*N);%行取整函数
col_n=round(col*N);%列取整函数
%新图像初始化
fnew=zeros(row_n,col_n,color,class(f));
%采用最近邻放缩
%使用class获得原图像的数据类型,使得新图像数据类型与原图像保持一致
for i=1:row_n
    for j=1:col_n
        for n=1:color
            m=round(i/N);%对应原理中的公式
            k=round(j/N);%m,k为新像素点
            if m<1%处理不理想值的情况
                m=1;
            end
            if k<1
                k=1;
            end
            if m>row
                m=row;
            end
            if k>col
                k=col;
            end
            fnew(i,j,n)=f(m,k,n);
        end
    end
end
figure;
imshow(f);
title('原图');
figure;
imshow(fnew)
title('缩小后的图片');

数字图像处理-matlab图像内插
数字图像处理-matlab图像内插

双线性插值

根据待求点P相邻最近4个点的像素值,计算出P点的像素值。
数字图像处理-matlab图像内插
已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值,这就是所谓的双线性插值。
数字图像处理-matlab图像内插
得到P点的像素 f(x, y)

clear
f=imread('lena.jpg');
N=0.8;
[row,col,color]=size(f);
row_n=round(row*N);%行取整函数
col_n=round(col*N);%列取整函数
%新图像初始化
fnew=zeros(row_n,col_n,color,class(f));
%采用双线性放缩
%使用class获得原图像的数据类型,使得新图像数据类型与原图像保持一致
for i=1:row_n
    for j=1:col_n
        for n=1:color
            m=round(i/N);%对应原理中的公式
            k=round(j/N);%m,k为新像素点
            s=m+1;
            q=k+1;
            %处理不理想值的情况
            if m<1
                m=1;
            end
            if k<1
                k=1;
            end
            if m>row
                m=row;
            end
            if k>col
                k=col;
            end
            if s>row
                m=row-1;
            end
            if q>row;
                k=col-1;
            end
            u = i/N-floor(i/N); %求取水平方向上的权重
            v = j/N-floor(j/N); %求取垂直方向上的权重

            fnew(i,j,n) = u*v*f(m,k,n)+(1-u)*v*f(m+1,k,n)+u*(1-v)*f(m,k+1,n)+(1-u)*(1-v)*f(m+1,k+1,n);
            
        end
    end
end
figure;
imshow(f);
title('原图');
figure;
imshow(fnew)
title('缩小后的图片');

数字图像处理-matlab图像内插
数字图像处理-matlab图像内插

双三次插值

参考博客

在这种方法中,插值点 (x, y) 的像素灰度值 f(x, y) 通过矩形网格中 最近的十六个采样点的加权平均 得到,而 各采样点的权重由该点到待求插值点的距离确定,此距离包括 水平和竖直 两个方向上的距离。
数字图像处理-matlab图像内插

上图是一个二维图像的双三次插值俯视示意图。设待求插值点坐标为 (i+u, j+v),已知其周围的 16 个像素坐标点 (网格) 的灰度值,还需要计算 16 个点各自的权重。
以像素坐标点 (i, j) 为例,因为该点在 y 轴和 x 轴方向上与待求插值点 (i+u, j+v) 的距离分别为 u 和 v,所以的权重为 w(u) × w(v),其中 w(·) 是插值权重核 (可以理解为定义的权重函数)。
同理可得其余 15 个像素坐标点各自的权重。那么,待求插值点 (i+u, j+v) 的灰度值 f(i+u, j+v) 将通过如下计算得到:

f ( i + u , j + v ) = A × B × C f(i+u,j+v)=A×B×C f(i+u,j+v)=A×B×C
数字图像处理-matlab图像内插
插值权重核 w(·) 为:

数字图像处理-matlab图像内插
推荐参考博客
下面的代码争对的是二维图像的双三次插值处理,若加上彩色会有三个通道,在矩阵转置中会比较麻烦,所以这里只用了两个图像通道。

%双三次插值具体实现
clc,clear;
tic; % calculate running time
fff=imread('lena.jpg'); 
ff =rgb2gray(fff);%转化为灰度图像
[row,col]=size(ff);               %将图像隔行隔列抽取元素,得到缩小的图像f
row_n=row/2;
col_n=col/2;
f =zeros(row_n,col_n);
for i=1:row_n
   for j=1:col_n
     f(i,j)=ff(2*i,2*j);
   end
end
 
k=2;                       %设置放大缩小,相对于缩小后图像进行处理

row_n1=round(k*row_n);
col_n1=round(k*col_n);
a=f(1,:);
c=f(row_n,:);             %将待插值图像矩阵前后各扩展两行两列,共扩展四行四列
b=[f(1,1),f(1,1),f(:,1)',f(row_n,1),f(row_n,1)];
d=[f(1,col_n),f(1,col_n),f(:,col_n)',f(row_n,col_n),f(row_n,col_n)];
a1=[a;a;f;c;c];
b1=[b;b;a1';d;d];
f1=double(b1');
fnew =zeros(row_n1,col_n1);
for i=1:row_n1                 %利用双三次插值公式对新图象所有像素赋值
    u=rem(i,k)/k;
    i1=floor(i/k)+2;
    A=[sw(1+u) sw(u) sw(1-u) sw(2-u)];  
  for j=1:col_n1
     v=rem(j,k)/k;
     j1=floor(j/k)+2;
     C=[sw(1+v);sw(v);sw(1-v);sw(2-v)];
     B=[f1(i1-1,j1-1) f1(i1-1,j1) f1(i1-1,j1+1) f1(i1-1,j1+2)
       f1(i1,j1-1)   f1(i1,j1)  f1(i1,j1+1)   f1(i1,j1+2)
       f1(i1+1,j1-1)   f1(i1+1,j1) f1(i1+1,j1+1) f1(i1+1,j1+2)
       f1(i1+2,j1-1) f1(i1+2,j1) f1(i1+2,j1+1) f1(i1+2,j1+2)];
     fnew(i,j)=(A*B*C);
   end
end
gfnew=uint8(fnew); 

figure,imshow(uint8(f));title('缩小的图像');             %显示缩小的图像 
figure,imshow(ff);title('原图');               %显示原图像
figure,imshow(gfnew);title('双三次插值放大的图像');     %显示插值后的图像
toc;

数字图像处理-matlab图像内插

历时 1.267243 秒。

数字图像处理-matlab图像内插

总结

最近邻内插简单但容易产生不想要的人为失真,如严重的直边失真。
双线性内插的结构比最近邻结果好很多,由4个最近邻的像素得出,但计算量随之增大。
复杂度最高的是双三次内插,由16个最近邻的像素得出,但花费时间会更久。文章来源地址https://www.toymoban.com/news/detail-436241.html

到了这里,关于数字图像处理-matlab图像内插的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于matlab的数字图像处理之彩色图像处理

    一、实验目的 (1)了解如何利用RGB分量生成简单的图像。 (2)熟练掌握RGB彩色模型转换到HIS彩色模型的过程。 (3)熟练掌握RGB图像的彩色分割。 (4)熟练掌握彩色图像如何在向量空间中进行边缘检测。 二、实验仪器(软件平台)     计算机、MATLAB软件 三、实验原理

    2024年02月06日
    浏览(48)
  • matlab数字图像处理之图像增强

    图像处理 基本目的之一是改善图像质量,而改善图像最常用的技术是图像增强的目的是为了改善图像的视觉效果,使图像更加清晰,便于人和计算机对图像进一步的分析和处理 图像质量 的基本含义是指人们对一幅图像视觉感受的评价。图像增强的目的就是为了改善图像显示

    2024年02月04日
    浏览(57)
  • 数字图像处理实验之Matlab对图像的基本处理

    1、提取Lena图像的左半上角部分,与原始Lena图像在同一个figure中显示,并做适当命名 效果图 2、利用 imnoise , 对原始Lena图像叠加高斯噪声,产生4幅、14幅、140幅的含噪图像。对这些含噪图像采用 相加  运算,来验证、比较图像相加消除叠加性噪声的效果。将原始图像、1幅噪

    2024年02月03日
    浏览(63)
  • 数字图像处理 关于matlab的图像变换

    熟悉及掌握图像的傅里叶变换、离散余弦变化原理及性质,实现图像的频率域变换。 1. 读入一幅图像,分别为图像添加叠加密度为0.04的椒盐噪声,均值为0方差为0.02的高斯噪声,做FFT变换。将原始图像、原始图像频谱图、添加噪声后的图像,以及噪声图像的频谱图同时显示出

    2024年02月05日
    浏览(54)
  • 数字图像处理之matlab大作业:自制图像处理小工具

    学习的过程向来不是容易的,创造一个作品的过程更是不容易的。因此,在文章的最后,提供了两个现成的示例代码,大家直接可以拿来运行。在完成大作业的时候,大家可以在已有作品的基础上,按照自己的需求进行修改,添加我们课程要求的功能,并体会如何完成一个完

    2024年02月10日
    浏览(46)
  • 数字图像处理之matlab实验(五):形态学图像处理

    常见的形态学处理包括腐蚀、膨胀、开运算、闭运算。不同的操作有不同的作用,同样的操作在不同类型的图片上也有不同效果,具体效果如下表格所示。要求熟练掌握对二值图像的形态学处理。 不同操作对不同类型图像处理效果 一、对二值图像进行处理 1、结构元素 在开

    2024年02月04日
    浏览(64)
  • 【数字图像处理】实验三 图像分割(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图 (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实验要求 (1)尝试不同的阈值选择方法,实现灰度图像二值化 (2)变换参数实现形态学滤波,查看滤波

    2024年02月05日
    浏览(50)
  • 【数字图像处理】实验(2)——图像增强(MATLAB实现)

    (1)进一步掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数。 (2)掌握各种图像增强方法。 1.打开一幅彩色图像Image1,使用Matlab图像处理函数,对其进行下列变换: (1)将Image1灰度化为gray,统计并显示其灰度直方图; (2)对gray进行分段线性变换; (3)对gray进行

    2023年04月23日
    浏览(56)
  • 【数字图像处理】实验二 图像增强(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图  (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实验要求 (1)对以上处理变换参数,查看处理效果; (2)更改伪彩色增强方法为热金属编码或彩

    2023年04月12日
    浏览(85)
  • matlab数字图像处理——图像的读写,灰度、二值图像

    一、实验目的 1.结合数字图像处理的知识,直观感受图像处理的基本实现过程 2.熟悉MATLAB工具的使用 3.了解图像的读写和显示 二、实验内容 实验内容一:图像读取 (1)利用编程实现读取图像 利用imread读取文件夹images中的图像;查看读取到的图像数据矩阵,对比灰度图像、

    2024年02月07日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包