精华内容
下载资源
问答
  • 读入一幅图像,对其进行等比例、不等比例缩放
  • 使用临近插值法和双线性插值法进行图像处理,将彩色图像缩放之后仍输出彩色图像
  • 目录一、插值与图像缩放二、最近邻插值1、原理2、代码实现三、双线性插值1、原理2、代码实现 一、插值与图像缩放   首先举个例子说明插值过程,先看看matlab的插值函数 interp() 吧: x = -2 : 1 : 2; y = -2 : 1 ...
  • Write a function Reduce / Expand that has an image as an input and the output should be re-sampled copy of half / twice the width and height of the input image.
  • matlab实现图像缩放

    2021-04-18 06:04:13
    【实例简介】不调用方法,手动实现图像缩放【实例截图】【核心代码】% MATLAB script for Assessment Item-1% Task-1clear; close all; clc;%% Step-1: Load input image and conversion of input image to grey-...

    【实例简介】不调用方法,手动实现图像缩放

    【实例截图】

    d38ca3c8cf05c762d8ef355e2df02434.png

    【核心代码】

    % MATLAB script for Assessment Item-1

    % Task-1

    clear; close all; clc;

    %% Step-1: Load input image and conversion of input image to grey-scale image

    I = imread('Zebra.jpg');

    figure;

    imshow(I);

    title('Load input image', 'FontSize', 18);

    Igray = rgb2gray(I);

    figure;

    imshow(Igray);

    title('Conversion of input image to greyscale', 'FontSize', 18);

    %% Step-2: Nearest-neighbor interpolation

    n = 3; % multiple of expand

    [w,h] = size(Igray); % the size of greyscale

    Inearest = zeros(w*n,h*n); % build a matrix which size is triple times of original image

    for row1 = 1:w*n % build a circluation to traverse every pixel

    for col1 = 1:h*n

    row = round(row1/n); % copy the value of pixel based on index

    col = round(col1/n);

    if row<1

    row = 1;

    end

    if row > w

    row = w;

    end

    if col < 1

    col = 1;

    end

    if col > h

    col = h;

    end

    % ensure the index of pixel is positive integer

    Inearest(row1,col1) = Igray(row,col); % use pixels of original image to fill output image

    end

    end

    Inearest=uint8(Inearest); % Conversion of double to uint8

    figure;

    imshow(Inearest);

    colorbar;

    axis on;

    title('Figure 1: Nearest-neighbor interpolation', 'FontSize', 22);

    %% Step-3: Bilinear Interpolation

    Ibilinear = zeros(w*n,h*n); % build a matrix which size is triple times of original image

    for row2 = 1:w*n % build a circluation to traverse every pixel

    for col2 = 1:h*n

    row = row2/n; % copy the value of pixel based on index

    col = col2/n;

    dec1 = row-floor(row); % get fractional part for bilinear interpolation formula

    dec2 = col-floor(col);

    if row < 1

    row = 1;

    end

    if row > w

    row = w;

    end

    if col < 1

    col = 1;

    end

    if col > h

    col = h;

    end

    % ensure the index of pixel is positive integer

    Ibilinear(row2,col2) = (1-dec2)*(1-dec1)*Igray(floor(row),floor(col)) ...

    dec2*(1-dec1)*Igray(floor(row),ceil(col)) ...

    (1-dec2)*dec1*Igray(ceil(row),floor(col)) ...

    dec2*dec1*Igray(ceil(row),ceil(col));

    % use pixels of original image to fill output image based on bilinear interpolation formula

    end

    end

    Ibilinear = uint8(Ibilinear); % Conversion of double to uint8

    figure;

    imshow(Ibilinear);

    colorbar;

    axis on;

    title('Figure 2: Bilinear interpolation', 'FontSize', 22);

    展开全文
  • matlab图片缩放代码.zip

    2019-12-09 13:48:35
    包含最近邻插值、双线性插值和三次插值的matlab代码,自己已经测试过,使用的时候注意将图片转换为位图,否则会出现错误。
  • MATLAB图像缩放,matlab实现图像缩放,matlab源码
  • matlab图像缩放 包含实验程序和结果
  • %======用matlab图像进行缩放(双线性插值法)clear; %此题是用双线性插值法实现图像缩放I=imread('f.jpg');%读入原图像,只需将此处的文件换成要变换的图片即可%图像属性% Filename: 'f.jpg'%FileModDate: '24-Aug-...

    %======用matlab对图像进行缩放(双线性插值法)

    clear;   %此题是用双线性插值法实现图像缩放

    I=imread('f.jpg');

    %读入原图像,只需将此处的文件换成要变换的图片即可

    %图像属性

    %  Filename: 'f.jpg'

    %

    FileModDate: '24-Aug-2008 16:50:30'

    %           FileSize: 20372

    %

    Format: 'jpg'

    %      FormatVersion: ''

    %              Width: 480

    %

    Height: 640

    %           BitDepth: 8

    %          ColorType:

    'grayscale'

    %    FormatSignature: ''

    %    NumberOfSamples: 1

    %

    CodingMethod: 'Huffman'

    %      CodingProcess: 'Sequential'

    %

    Comment: {}

    [rows,cols]=size(I);

    K1 = str2double(inputdlg('请输入行缩放倍数', 'INPUT scale factor', 1,

    {'0.5'}));%行默认变为原来的0.5倍

    K2 = str2double(inputdlg('请输入列缩放倍数', 'INPUT

    scale factor', 1, {'0.4'}));%列默认变为原来的0.4倍

    width = K1 * rows;

    height = K2 * cols;

    Out = uint8(zeros(width,height));  %创建输出图像矩阵

    widthScale = rows/width;

    heightScale = cols/height;

    for x = 6:width - 6           % 6是为了防止矩阵超出边界溢出

    for y = 6:height - 6

    oldX = x * widthScale;     % oldX,oldY为原坐标,x,y为新坐标

    oldY = y * heightScale;

    if (oldX/double(uint16(oldX)) == 1.0) &

    (oldY/double(uint16(oldY)) == 1.0)

    Out(x,y) = I(int16(oldX),int16(oldY));%若oldX,oldY为整数,直接赋值

    else

    a = double(uint16(oldX));

    b = double(uint16(oldY));

    x11 = double(I(a,b));                % x11 赋值为 I(a,b)

    x12 = double(I(a,b+1));              % x12 赋值为 I(a,b+1)

    x21 = double(I(a+1,b));              % x21 赋值为 I(a+1,b)

    x22 = double(I(a+1,b+1));            % x22 赋值为

    I(a+1,b+1)

    Out(x,y) = uint8( (b+1-oldY) * ((oldX-a)*x21 +

    (a+1-oldX)*x11) + (oldY-b) * ((oldX-a)*x22 +(a+1-oldX) * x12) );    %

    用双线性插值计算公式计算

    end

    end

    end

    imshow(I);

    figure;

    imshow(Out);

    %===============使用matlab对图片进行缩放(最近邻域法)

    clear;  %此题是用最近邻域法实现图像缩放

    I=imread('f.jpg');%读入图像

    %图像属性

    %

    Filename: 'f.jpg'

    %       FileModDate: '24-Aug-2008 16:50:30'

    %

    FileSize: 20372

    %             Format: 'jpg'

    %      FormatVersion:

    ''

    %              Width: 480

    %             Height: 640

    %

    BitDepth: 8

    %          ColorType: 'grayscale'

    %

    FormatSignature: ''

    %    NumberOfSamples: 1

    %       CodingMethod:

    'Huffman'

    %      CodingProcess: 'Sequential'

    %            Comment:

    {}

    [rows,cols]=size(I);

    K1 = str2double(inputdlg('请输入行缩放倍数', 'INPUT scale factor', 1,

    {'0.6'}));%行默认变为原来的0.6倍

    K2 = str2double(inputdlg('请输入列缩放倍数', 'INPUT

    scale factor', 1, {'0.4'}));%列默认变为原来的0.4倍

    width = K1 * rows;

    height = K2 * cols;

    im2 = uint8(zeros(width,height)); %定义输出图像矩阵

    widthScale = rows/width;

    heightScale = cols/height;

    for x = 6:width - 6         %为防止矩阵溢出而选择的参数6

    for y = 6:height - 6

    oldX = x * widthScale; %oldX,oldY为原坐标,x,y为新坐标

    oldY = y * heightScale;

    if (oldX/double(uint16(oldX)) == 1.0) &

    (oldY/double(uint16(oldY)) == 1.0)

    im2(x,y) = I(int16(oldX),int16(oldY));

    else

    a = double(round(oldX));

    b = double(round(oldY)); %若不是整数四舍五入后把临近值赋过去

    im2(x,y) = I(a,b);

    end

    end

    end

    imshow(I); %输出原图像

    figure;

    imshow(im2); %输出缩放后图像

    %====================用matlab对图像进行旋转(双线性插值法)

    clear;%此题是用最近邻域法实现图像旋转

    im1=imread('b.jpg');

    [m,n,p]=size(im1);

    %

    将图像旋转30度

    a=0.5; %a=sin30=0.5

    b=0.866;  %b=cos30=0.866

    row=n*a+m*b;

    col=n*b+m*a;

    for

    i=1:row                                %先把图象填充成全黑

    for j=1:col

    im2(i,j,:)=uint8(0);

    end

    end

    for i=1:m                                          %把原图象像素点旋转后变为新图象点

    for j=1:n

    xx=round(abs((i-m/2)*b-(j-n/2)*a+row/2));

    yy=round(abs((i-m/2)*a+(j-n/2)*b+col/2));

    for k=1:3

    im2(xx,yy,k)=im1(i,j,k);

    end

    end

    end

    temp1=uint8(0);

    temp2=uint8(0);

    temp3=uint8(0);

    for i=1:row                                        %把画面上的空点按照最近邻插值法填充

    temp1=uint8(0);

    temp2=uint8(0);

    temp3=uint8(0);

    for j=1:col                                    %找到最右的图象边界点

    if

    (im2(i,j,:)==uint8(0))

    else

    kk=j;

    end

    end

    for j=1:kk

    if (im2(i,j,:)==uint8(0))

    im2(i,j,1)=temp1;

    im2(i,j,2)=temp2;

    im2(i,j,3)=temp3;

    else

    temp1=im2(i,j,1);

    temp2=im2(i,j,2);

    temp3=im2(i,j,3);

    end

    end

    end

    imshow(im1);

    figure;

    imwrite(im1,'5.jpg');

    %保存原图像

    imshow(im2);

    imwrite(im2,'6.jpg');%保存旋转后图像

    %======================用matlab对图片进行旋转(最近邻域法)

    clear;%此题是用最近邻域法实现图像旋转

    im1=imread('b.jpg');

    [m,n,p]=size(im1);

    %

    将图像旋转30度

    a=0.5; %a=sin30=0.5

    b=0.866;  %b=cos30=0.866

    row=n*a+m*b;

    col=n*b+m*a;

    for

    i=1:row                                %先把图象填充成全黑

    for j=1:col

    im2(i,j,:)=uint8(0);

    end

    end

    for i=1:m                                          %把原图象像素点旋转后变为新图象点

    for j=1:n

    xx=round(abs((i-m/2)*b-(j-n/2)*a+row/2));

    yy=round(abs((i-m/2)*a+(j-n/2)*b+col/2));

    for k=1:3

    im2(xx,yy,k)=im1(i,j,k);

    end

    end

    end

    temp1=uint8(0);

    temp2=uint8(0);

    temp3=uint8(0);

    for i=1:row                                        %把画面上的空点按照最近邻插值法填充

    temp1=uint8(0);

    temp2=uint8(0);

    temp3=uint8(0);

    for j=1:col                                    %找到最右的图象边界点

    if

    (im2(i,j,:)==uint8(0))

    else

    kk=j;

    end

    end

    for j=1:kk

    if (im2(i,j,:)==uint8(0))

    im2(i,j,1)=temp1;

    im2(i,j,2)=temp2;

    im2(i,j,3)=temp3;

    else

    temp1=im2(i,j,1);

    temp2=im2(i,j,2);

    temp3=im2(i,j,3);

    end

    end

    end

    imshow(im1);

    figure;

    imwrite(im1,'5.jpg');

    %保存原图像

    imshow(im2);

    imwrite(im2,'6.jpg');%保存旋转后图像

    展开全文
  • matlab实现图像缩放

    万次阅读 2019-07-03 19:07:09
    matlab实现图像缩放 缩放同样是仿射变换的一种特例,它接受水平和垂直两个方向的缩放值。 matlab 实现水平,垂直,水平垂直缩放: clear all close all clc img = imread('test.jpg'); %读取输入图片的...

    matlab实现图像的缩放

    缩放同样是仿射变换的一种特例,它接受水平和垂直两个方向的缩放值。

    在这里插入图片描述
    matlab 实现水平,垂直,水平垂直缩放:

    clear all
    close all
    clc
    img = imread('test.jpg'); %读取输入图片的数据
    [h,w,d] = size(img); %获取行和列,即原图的高度和宽度
    xscale = 3;
    yscale = 3;
    ht = floor(h./xscale);
    wt = floor(w./yscale);
    %zoo = zeros(ht,w,d);
    for i = 1:ht
        for j = 1:w
           % for k = 1:d
              %zoo(i,j,d) = img(floor(i*xscale),j,d);
           % end
           zooh(i,j) = img(floor(i*xscale),j);
        end
    end
    
    for i = 1:h
        for j = 1:wt
           zoow(i,j) = img(i,floor(j*xscale));
        end
    end
    
    for i = 1:ht
        for j = 1:wt
           zoohw(i,j) 
    展开全文
  • Matlab——图像缩放(插值法)

    万次阅读 多人点赞 2018-07-30 15:49:36
     用双线性内插法实现位深度为8的灰度图像缩放。   思路:  输入原图像以及缩放图像的像素要求(宽度*高度),处理后输出新图像。  我是用matlab来实现scale(input_img,scale_size)函数的,输入图像路径...

    实验内容:

        用双线性内插法实现位深度为8的灰度图像的缩放。

     

    思路:

         输入原图像以及缩放后图像的像素要求(宽度*高度),处理后输出新图像。

        我是用matlab来实现scale(input_img,scale_size)函数的,输入图像路径以及要求实现的宽度scale_w和高度值scale_h即可。通过matlab把原图像转化为img矩阵,这样矩阵img(a, b)元素的值就是原图像高度为a,宽度为b处的像素值。

       设处理前后图像的宽度和高度分别为w、h,scale_w、scale_h。

        如上图所示,row对应的是高度,设为x轴;col对应的是宽度,设为y轴;value对应的是灰度值,设为z轴。

     

        通过缩放比例,可以求得新图像B在(i,j)处对应原图像的点为(x,y)(其中x= i*h/scale_h,y= j*w/scale_w)。

    但是这两个值可能为浮点数,而像素中的位置是整数,所以这个点在原图像中对应的可能是“虚”点。所以,我们需

    要根据找该“虚”点周围的四个点来进行双线性插值得到新图像的灰度值。我们应该取的是(x,y)邻近的四个像素

    (x0,y0) 、(x0,y1) 、(x1,y0) 、(x1,y1),它们对应的灰度值为f(x0,y0) 、f(x0,y1)、 f(x1,y0)、 f(x1,y1)。

      

        先对x方向进行插值,再对y方向进行插值,计算如下:

        

        

        

     

        反过来,先对y方向:

        

        

        

     

        显然,邻近像素的x1-x0 = y1-y0 = 1
        整理式子得到:

     

        这里u、v分别是x、y的小数部分,即u = x - x0; v = y - y0

           要注意的是:上述公式img(a,b)中的a和b不能小于1,所以当x和y小于1时需要将其重新赋值为1。

     

    代码:

    function output_img = scale(input_img, scale_size)
    %Input - input_img is a two-dimensional matrices storing image
    %      - scale_size is a tuple of [width, height] defining the spatial resolution of output
    %Output - output_img is the same as input_img
     
    img = imread(input_img); %读取输入图片的数据
    [h,w] = size(img); %获取行和列,即原图的高度和宽度
     
    scale_w = scale_size(1); %根据输入获得缩放后的新宽度
    scale_h = scale_size(2); %根据输入获得缩放后的新高度
    output_img = zeros(scale_h, scale_w); %初始化
     
    for i = 1 : scale_h         %缩放后的图像的(i,j)位置对应原图的(x,y)
        for j = 1 : scale_w
            x = i * h / scale_h;
            y = j * w / scale_w;
            u = x - floor(x);
            v = y - floor(y); %取小数部分
            
            if x < 1           %边界处理
                x = 1;
            end
            
            if y < 1
                y = 1;
            end
            
     
            %用原图的四个真实像素点来双线性插值获得“虚”像素的像素值
            output_img(i, j) = img(floor(x), floor(y)) * (1-u) * (1-v) + ...
                                   img(floor(x), ceil(y)) * (1-u) * v + ...
                                   img(ceil(x), floor(y)) * u * (1-v) + ...
                                   img(ceil(x), ceil(y)) * u * v;
        end
    end
     
    imwrite(uint8(output_img), '../output_img.png'); %保存处理后的图像
    imshow(input_img); %显示原图
    figure,imshow(uint8(output_img)) %显示处理后的图像
    

    运行时若图片在代码上一级目录,则输入scale('../a.png', [450,300]);

     

    效果图:

    原图为384*256:

    缩小成192*128:  

    放大成450*300:

    缩放成500*200:

     

    //

     转载:https://blog.csdn.net/Stella_Chan/article/details/78025020?locationNum=5&fps=1

    展开全文
  • matlab实现图片缩放

    千次阅读 2019-07-07 15:38:37
    zoomNum为缩放系数 height和width的命名可能反了,不要在意这些细节… I=imread('tissue.png'); figure(1); imshow(I) zoomNum=0.5; [fWidth fHeight]=size(I); fHeight=fHeight/3; cWidth=floor(fWidth*...
  • 利用matlab进行图像的一些操作处理 缩放和旋转功能的实现
  • Matlab实现图像的比例缩放

    万次阅读 多人点赞 2018-05-10 22:35:49
    以灰度图像circuit.tif为例,利用Matlab图像处理工具箱中的imresize函数对图像进行比例缩放变换。要求:创建4个figure窗口(不可以用subplot,显示不出来放大效果),分别用于显示原始图像、等比例放大1.5倍后的图像...
  • 自编Matlab函数实现图像缩放 自编Matlab函数实现图像缩放 自编Matlab函数实现图像缩放 自编Matlab函数实现图像缩放 自编Matlab函数实现图像缩放
  • matlab图像缩放算法简单原理

    千次阅读 2016-01-24 20:32:29
    % matlab库函数,调用imresize可以重新生成不同尺寸的图片   cubic_factor函数 % 距离系数计算公式 % ┏ 1 - 2 *Abs(x)^ 2 +Abs(x)^ 3  , 0 (x)< 1 % S(x)={ 4 - 8 *Abs(x)+ 5 *...
  • Matlab图像的几何变换之图像缩放

    万次阅读 2017-12-13 13:07:37
    Matlab图像缩放 Matlab实现函数代码如下: clc I=rgb2gray(imread('Campus-scenery2sk.JPG')); figure,imshow(I); title('原图'); reduceI=imresize(I,0.5); %原图像I缩小0.5倍 figure,imshow(reduceI); title('...
  • matlab开发-使用交叉像素插值进行图像缩放。使用跨像素插值算法放大NxM图像
  • MATLAB:图片缩放

    千次阅读 2018-10-21 17:31:33
    将指定文件夹中的所有图片一次缩小后保存,名字与原来的名字相同。 核心语句: S=imresize(rgb,1/6,'nearest'); 整体代码: file_path = 'F:\2018\'; % 图像文件夹路径 img_path_list = dir(strcat(file_path,'*....
  • 可以通过给定的正因子缩放给定的图像。 复制nearest_neighbor_zoom.m 文件和应该放大到您的工作目录的图像文件。 如果图像文件的名称是 image.jpg 并且需要的缩放系数是 2.23, 在命令窗口上运行以下命令。 Nearest_...
  • matlab开发-图像处理使用双线性插值缩放动画。本文采用双线性插值法对图像进行正整数因子缩放
  • matlab开发-使用相邻插值缩放动画。最近邻插值用于将图像缩放任意
  • - imres 是用于将图像重新采样为新图像的功能。 - imrot 是将图像旋转任意角度的功能(imres 是此功能的先决条件)。 - imsca 是一种放大或缩小具有任意比例因子的图像的功能(imres 是此功能的先决条件)
  • MATLAB图像放大

    2015-06-10 21:19:58
    基于matlab图像放大代码,操作简单速度快。
  • 这里介绍matlab gui设计之缩放,实现任意控件的缩放和不缩放设计 这里考虑实际需要,缩放GUI时并不想缩放全部控件,比如只想缩放坐标轴显示的波形,而设定按钮和串口配置等保持位置和大小不变 如果仅仅按照matlab...
  • 三角网格与鱼眼变换相结合的图像缩放方法
  • matlab缩放函数图像代码数字可缩放矢量图形(SVG)导出 将2D和3D Matlab图转换为可缩放矢量格式(SVG)。 此格式由W3C()指定,可以使用Internet浏览器查看和打印。 添加了对过滤器,剪切和刻度标记扩展的初步支持...
  • matlab开发-图像局部缩放图像局部放大图像放大。这有助于将图像的局部斑块放大为较大的斑块,以比较细节。
  • MATLAB实现图像的放大和缩放

    千次阅读 2021-11-02 22:26:20
    t=imread('图像处理.png'); [m,n,dep]=size(t); rm=3630; rn=2355; rt=zeros(rm,rn,dep); for i=1:rm for j=1:rn x=i*m/rm; y=j*n/rn; u=x-floor(x); v=y-floor(y); if x<1 x=1; end if y<1 y=1; end rt(i,j,:...
  • 使用matlab图像进行缩放

    千次阅读 2018-03-23 10:46:10
    参考:https://www.cnblogs.com/zangyu/p/5395504.html对图像进行固定大小的缩放clear; clc; %清除以前的数据 folderName = dir('train'); %显示train文件夹下的文件和文件夹 for i = 1 : length(folderNa...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,497
精华内容 3,798
关键字:

matlab图像缩放方法

matlab 订阅