MATLAB 几何运算之图像的放大

一、最近邻插值算法

思想&步骤:

1.根据放大的倍数,新建一个大小为原图像大小*倍数的0矩阵

2.0矩阵的每一个像素点的值根据原图像求出,即分别把x,y除以倍数后得到的小数取整( matlab中的round函数取小数的最近整数 )

3.对于边缘的情况要注意

最邻近插值简单且直观,速度也最快,但得到的图像质量不高。

代码demo:

A=imread('E:\matlab\work\tiger.jpg');%读取图像信息
imshow(A);%显示原图
title('原图');
Row=size(A,1);
Col=size(A,2);%图像行数和列数
nn=2;%放大倍数
m=round(nn*Row);%求出变换后的坐标的最大值
n=round(nn*Col);
B=zeros(m,n,3);%定义变换后的图像
for i=1:m
  for j=1:n
     x=round(i/nn);
     y=round(j/nn);%最小临近法对图像进行插值
     %处理边缘
     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,:);
   end
end
B=uint8(B);%将矩阵转换成8位无符号整数 
figure;
imshow(B);
title('最邻近插值法放大');

效果:

二、双线性插值算法

思想&步骤:

双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。

代码demo:

I=imread('E:\matlab\work\tiger.jpg');
figure,imshow(I);
title('origin image');
[rows cols tongdao]=size(I);
I=double(I);
k=2;
x_new=rows*k;
y_new=cols*k;%缩放至k倍

I_new=zeros(x_new,y_new,tongdao);
for rgb=1:tongdao
   for i=1:x_new
     for j=1:y_new
        x=i/k;a=floor(x);
        y=j/k;b=floor(y);%双线性插值算法
        if a>0&&b>0&&a<rows&&b<cols
              cxb=I(a+1,b,rgb)*(x-a)+I(a,b,rgb)*(1+a-x);
              cxb1=I(a+1,b+1,rgb)*(x-a)+I(a,b+1,rgb)*(1+a-x);
              I_new(i,j,rgb)=round(cxb1*(y-b)+cxb*(1+b-y));
        end
      end
   end
end
figure,imshow(uint8(I_new));
title('result image');

效果:

ps:

在MATLAB中,可用其自带的函数imresize( )来实现双线性内插值算法。

双线性内插值算法的MATLAB源代码为:

A=imread(‘...‘);

C=imresize(A,8,‘bilinear‘); %8为放大的倍数

时间: 2024-08-08 13:41:26

MATLAB 几何运算之图像的放大的相关文章

图像的几何运算

目录 1.图像的插值 2.旋转与平移变换 3.缩放与裁剪变换 4.镜像变换 @ 图像的几何运算是指引起图像几何形状发生改变的变换.与点运算不同的是,几何运算可以看成是像素在图像内的移动过程,该移动过程可以改变图像中物体对象之间的空间关系. 1.图像的插值 图像插值是指利用已知邻近像素点的灰度值来产生位置像素点的灰度值,以便由原始图像再生成具有更高分辨率的图像.插值是在不生成新的像素的情况下对原图像的像素重新分布,从而改变像素数量的一种方法.在图像放大过程中,像素也相应的增加,增加的过程就是'插值

Matlab图像处理系列4———图像傅立叶变换与反变换

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内可以加工处理图像以外,我们还可以将图像变换到其他空间后进行处理,这些方法称为变换域方法,最常见的变换域是频域. 使用Fourier变换把图像从空间域变换到频域,在频域内做相应增强处理,再从频域变换到空间域得到处理后的图像. 我们这里主要学习Fourier变换和FFT变换的算法,没有学过通信原理,我对信号.时域分析也不是很清楚. 2.FFT算法 (1)离散Fourier变

[.NET]解决EMF图像自动放大空白

在.NET中产生emf主要使用Metafile对象,但在使用过程中会发生图像自动放大,多余空白的问题. 模拟:声明Size(100,100)的区域,并绘制p1(-50,-50)->p2(50,50)的线条. 常规情况如下图: 图中的(0,0)点并非左上角. 正确限定区域方法: new Metafile(file, intptr, visibleClipBounds,MetafileFrameUnit.Pixel); 结果如下图:

matlab各类数据l图像之间的转化

matlab各类数据图像之间的转化 rgb类型转化为二值的过程如下: 1.采用命令im2double将rgb类型转化三维的double >> str='E:\programing\Eigenface_PAC\Face\image_0001.jpg'; >> A=imread(str); >> imshow(A); 2.用命令imresize调整图像的尺寸大小 >> B=imresize(A,[529 529]); >> imshow(B); 3.

linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

一:特殊符号用法整理 算术比较-eq 等于-ne 不等于-gt 大于-lt 小于-ge 大于或等于-le 小于或等于-a 逻辑与 and &&-o 逻辑或 or ||[ $var -eq 0 ]    #当$var等于0时,返回真[ $var -ne 0 ]    #当$var为非0时,返回真[ $var1 -ne 0 -a $var2 -gt 2 ][ $var1 -ne 0 -o $var2 -gt 2 ] 字符串比较[[ $str1 = $str2 ]]     #当str1等于st

C# 矩阵预算和一些基本的几何运算

以前工作中写的,这里备个份,有可能用到 基本的矩阵运算类,测试20阶以内应该没啥问题,超过20阶不好使... /// <summary> /// 矩阵 异常 512索引 1024无解 2046矩阵行列 /// </summary> public class Matrix { private int m_row;//行 private int m_col;//列 private double[,] m_data;//数据 /// <summary>元素 /// </

基于jQuery点击图像居中放大插件Zoom

分享一款基于jQuery点击图像居中放大插件Zoom是一款放大的时候会从原图像的位置以动画方式放大到画面中间,支持点击图像或者按ESC键来关闭效果.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="page-body"> <div style="width: 80px; height: 80px; margin-right: 10px; padding: 10px; float: left; background:

【转载】matlab练习程序(图像Haar小波变换)

matlab练习程序(图像Haar小波变换) 关于小波变换我只是有一个很朴素了理解.不过小波变换可以和傅里叶变换结合起来理解. 傅里叶变换是用一系列不同频率的正余弦函数去分解原函数,变换后得到是原函数在正余弦不同频率下的系数. 小波变换使用一系列的不同尺度的小波去分解原函数,变换后得到的是原函数在不同尺度小波下的系数. 不同的小波通过平移与尺度变换分解,平移是为了得到原函数的时间特性,尺度变换是为了得到原函数的频率特性. 小波变换步骤: 1.把小波w(t)和原函数f(t)的开始部分进行比较,计算

matlab ( octave ) imwrite 保存图像详解

刚刚写了imshow, 想了想发现imwrite和imshow是完全一致的, 所以根据上篇文章简单写写imwrite用法. 上篇文章链接: http://blog.csdn.net/watkinsong/article/details/38535341 采用图像: imwrite() 中, 如果参数为uint8类型, 那么期待的参数像素值范围为0-255, 如果参数矩阵为double类型, 那么期待的像素值范围为0-255. 在imwrite中, 如果你将读取的图像转换为double类型, 直接