精华内容
下载资源
问答
  • 基于matlab图像放大缩小测试

    千次阅读 2016-12-03 11:51:10
    下面我将按照线性代数的原理来实现图像放大缩小。 ImageS 源图像, ImageSx 源图像的宽度, ImageSy 源图像的高度 ImageD 目标图像, ImageDx 目标图像的宽度, ImageDy 目标图像的高度

    第一次尝试写博客,写的不好,多多见谅!

    今天,看到一篇文章,可以使用傅立叶的方式来实现缩放,自己在图像处理基本是白痴,因此,花些时间来学习缩放的算法。下面我将按照线性代数的原理来实现图像的放大缩小。


    ImageS  源图像,  ImageSx 源图像的宽度, ImageSy 源图像的高度

    ImageD  目标图像,  ImageDx 目标图像的宽度, ImageDy 目标图像的高度

    x_scale 图像宽放大/缩小倍数

    y_scale 图像高放大/缩小倍数

    ImageD(x,y) = ImageS  (int(x/x_scale ), int(y/y)scale))


    %缩放函数

    function [ ImageD   ] = ImageResize(ImageS  ,x_scale,y_scale )
    %UNTITLED6 此处显示有关此函数的摘要
    %   此处显示详细说明
    [ImageSx ImageSy g] = size(ImageS);


    ImageS = im2double(ImageS);


    ImageDx = ImageSx*x_scale;
    ImageDy = ImageSy*y_scale;


    ImageD = ones(ImageDx,ImageDy,g);


    for i = 1: ImageDx
        for j = 1: ImageDy
            ImageD(i,j,:) = ImageS(round(i/x_scale),round

    展开全文
  • MATLAB图像放大

    2015-06-10 21:19:58
    基于matlab图像放大代码,操作简单速度快。
  • 图像放大缩小MATLAB 代码)

    千次阅读 2021-04-29 02:34:10
    首先第一种:function I=ImageZoom(I1,x,y)%功能:实现图像的任意倍数缩放%x---水平缩放系数%y---竖直缩放系数if length(size(I1))>2I1=rgb2gray(I1);endfigure,imshow(I1);[m,n]=size(I1);newWidth=round(x*m);...

    首先第一种:

    function I=ImageZoom(I1,x,y)

    %功能:实现图像的任意倍数缩放

    %x---水平缩放系数

    %y---竖直缩放系数

    if length(size(I1))>2

    I1=rgb2gray(I1);

    end

    figure,imshow(I1);

    [m,n]=size(I1);

    newWidth=round(x*m);

    newHeight=round(x*n);

    T=[x 0 0;0 y 0;0 0 1];

    tform=maketform('affine',T);

    tx=zeros(newWidth,newHeight);

    ty=zeros(newWidth,newHeight);

    for i=1:newWidth

    for j=1:newHeight

    tx(i,j)=i;

    ty(i,j)=j;

    end

    end

    [w z]=tforminv(tform,tx,ty); %反向坐标值

    I=uint8(zeros(newWidth,newHeight));

    %给新图像各像素点赋值

    for i=1:newWidth

    for j=1:newHeight

    S_x=w(i,j);

    S_y=z(i,j);

    if(S_x>=m-1||S_y>=n-1||double(uint16(S_x))<=0||double(uint16(S_y))<=0)

    I(i,j)=0; %不在原图像上

    else

    if (S_x/double(uint16(S_x))==1.0&S_y/double(uint16(S_y))==1.0)

    I(i,j)=I1(uint16(S_x),uint16(S_y));%整数点

    else

    %不是整数点

    a=double(uint16(S_x));

    展开全文
  • 图像放大缩小matlab代码,自已编的,希望对大家有用。
  • 这是数字图像处理实验内容,老师规定用双线性插值法进行放大缩小,不过双线性插值法也太难了吧!!!

    MATLAB学习之图片放大缩小

    这是数字图像处理实验内容,老师规定用双线性插值法进行放大缩小,不过双线性插值法也太难了吧!!!

    代码如下:

    %此为控制台调用程序
    %m2_1('a.png',1.5,1)
    
    function m2_1( input_img,x,y )
    %input_img为输入图片;x,y为放大倍数
    %[X, map] = imread(...) 读取索引图像X以及与之对应的颜色表到map中。颜色表中的值将归一化到[0,1]之间。
    [I,~] = imread(input_img);
    input_img = imread(input_img);
    
    %获取原图像的长宽
    [width,height,~] = size(I);
    
    %计算新图像的长宽;round()四舍五入
    new_width = round(width*x);
    new_height = round(height*y);
    
    %figure();生成一个新窗口
    figure();
    imshow(input_img);
    title(['原图像(大小: ',num2str(width),'*',num2str(height),')']);
    
    %双线性差值法
    for i = 1:new_width
        for j = 1:new_height
            
            %x,y为放大倍数
            %原来图像的坐标,向下取整
            tempx = floor((i-1)/x);
            tempy = floor((j-1)/y);
            
            %对四条边和四个顶点进行处理,将原坐标转换成调整后的坐标。
            %(1,j)调整为(1,tempy+1)(i,1)调整为(tempx+1,1)
            if tempx == 0 || tempy == 0 || tempx == width-1 || tempy == height-1
                output_img(1,j,:) = input_img(1,tempy+1,:);
                output_img(i,1,:) = input_img(tempx+1,1,:);
                
            %对其余像素进行处理
            else
                %计算原图像坐标减去新图像坐标的小数部分为其余像素点
                a = (i-1) / x - tempx;
                b = (j-1) / y - tempy;
                
                %保证此图像中坐标最小值为1
                tempx = tempx+1;
                tempy = tempy+1;
                
                %双线性插值计算公式变形
                output_img(i,j,:) = input_img(tempx,tempy,:)*(1-a)*(1-b)+input_img(tempx,tempy+1,:)*(1-a)*b...
                    +input_img(tempx+1,tempy,:)*a*(1-b)+input_img(tempx+1,tempy+1,:)*a*b;
            end
        end
    end
    figure();
    imshow(output_img);
    title(['缩放后的图像(大小: ',num2str(new_width),'*',num2str(new_height),')']);
    imwrite(output_img,'resize.jpg');
    end
    

    代码解释

    部分代码解释已经写在上方了,在这儿只解释一下双线性插值法。(仅代表个人看法)

    双线性插值计算在这里插入图片描述

    这是我们老师关于双线性插值计算给出的算法,我就直接盗来用了吧。我觉得双线性插值算法,就是分别在x轴和y轴用两个已知的点来表示未知点坐标的方法,不过是用减法来表示未知点。但在这里我没有验证求两次x轴一次y轴和两次y轴一次x轴之间有什么不同。
    先对图像的四个顶点进行处理,再对图像的其他像素点进行处理,最后是进行双线性插值计算公式变形。一定要注意对边界的处理,防止图像的边界越界。

    由于老师命令用双线性插执法进行放大缩小,所以我再加一些普通的MATLAB图像放大缩小函数的使用吧。

    缩放函数

    B = imresize (A , m): 该函数返回缩放后的图像B:A为要进行缩放操作的原始图像,可以是灰度图像、彩色图像或者二值图像;m为缩放尺寸,当m的取值大于0小于1时,A图像被缩小,当m取值大于1后,A图像被放大。
    B = imresize (A , [mrows , ncols]): 数组[mrows , ncols]说明缩放后B图像的行和列,mrows或者ncols取值为NaN,则函数会按照输入图像A的纵横比生成ncols或者mrows的数。
    [B newmap] = imresize (A , map , m): m是缩放比例,它的取值可以是一个数值,也可以是数组;默认条件下,该函数的返回一个新的、最优的、缩放后的图像B的颜色映射数newmap。
    […] = imresize (… , method): 改函数返回采用method()方法对索引图像进行缩放的结果。method取值可以有以下两种:
      1、说明插值的方法类型:‘nearest’(默认值)最临近插值、'bilinear’双线性插值、'bicubic’双三次插值。
      2、说明选择插值的核函数:'box’BOX型的核函数、'triangle’三角型核函数(bilinear相同)、'Cubic’立方体核函数(bicubic相同)、'lanczos3’Lanczos-3核函数。

    […] = imresize (… , parameter , value , …): 该函数通过设置paramter的值value,控制图像的缩放特性。paramter和value取值如下表

    Paramter说明Value
    ‘Antialiasing’对缩放图像进行边缘柔和,取值为布尔型取值依赖于差值方法采用’nearest’,默认取值false,对于其他差值方法,默认取值为true
    ‘Colormap’颜色映射,取值为字符串取’original’ ,输出图像颜色映射与原图像相同;‘optimized’,输出图像颜色映射为最优
    ‘Dither’颜色抖动,取值为布尔型是否执行颜色抖动处理,仅对索引图像,默认取值为’ture’
    ‘Method’插值方法同[…] = imresizs(…,method)中的method取值
    ‘OutputSize’输出图像尺寸是一个两元素数组[mrows , ncols],如mrows或ncols中有一个取值为NaN,则根据原输入图像纵横比计算其取值
    ‘Scale’缩放比例可以是数值也可以是两元素数组[mrows , ncols]

    测试代码

    %图像缩放函数使用
    [X,map] = imread('a.png');
    
    J1 = imresize( X, 0.25);
    J2 = imresize(X,3.5);
    J3 = imresize(X,[64 40]);
    J4 = imresize(X,[64 NaN]);
    J5 = imresize(X,1.6,'bilinear');
    J6 = imresize(X,1.6,'triangle');
    [J7,newmap] = imresize(X,'Antialiasing',true,'Method','nearest','Colormap','original','Scale',0.15);
    
    figure,
    subplot(121),imshow(J1);
    subplot(122),imshow(J2);
    figure,
    subplot(121),imshow(J3);
    subplot(122),imshow(J4);
    figure,
    subplot(121),imshow(J5);
    subplot(122),imshow(J6);
    figure,
    subplot(121),imshow(X);
    subplot(122),imshow(J7);
    

    这其中

    J5 = imresize(X,1.6,'bilinear');
    

    为双线性插入法的调用函数,就是很简单的一句语句,而它的具体代码实现却很麻烦,这让我体会到底层算法实现的困难。

    展开全文
  • matlab图片进行放大缩小

    万次阅读 2017-03-15 10:06:20
    利用matlab 对数字图片进行放大缩小matlab在数字图像处理上的一个简单的应用matlab库函数imresize()的功能就是这个,那么imresize具体怎么实现的呢,我们可以自己写一个myimresize()imresize()的用法请查看matlab...
    利用matlab 对数字图片进行放大缩小是matlab在数字图像处理上的一个简单的应用
    

    matlab库函数imresize()的功能就是这个,那么imresize具体怎么实现的呢,我们可以自己写一个myimresize()
    imresize()的用法请查看matlab的HELP,搜索“imresize”

    首先我们必须知道彩色数字图像其实是一个m*n*3的数字矩阵组成的,其中的m*n表示图片在宽度和高度上的像素大小,我们通常说的320*240的普通MP3的图片格式就是由宽度上320个像素点和高度上240个像素点组成。而之所以乘3,是因为彩色采用的rgb(red,green,blue)的方式。对于图片上的每个点的颜色,都由3个数字(r,g,b)来决定,如(255,0,0)为红色,(0,255,0)为绿色。每个数字介于0~255之间(8位表示法)。

    对图片的放大和缩小,也就是说根据原来的图片矩阵来产生新矩阵。对于新矩阵的每个像素点,其取值有两种方式:
    一种是取对应原来位置最近的那个点的像素,这种做法失真比较高,我们称这种做法为“nearest”;
    另一种做法是取原来位置周围四个点的加权平均值,这种做法得到的图片比较柔和,我们称这种做法为双线性,“bilinear”,根据数学推导,很容易得知:
    【matlab攻坚】用matlab对图片进行放大和缩小
    f(x0,y0) = (1-b)*[a*f(x+1,y)+(1-a)*f(x,y)] + b*[a*f(x+1,y+1)+(1-a)*f(x,y+1)]

    源代码:
    function resized = myimresize(image,scale,method);

    % A funciton to resize a image
    % 'resized' is the result of the function, which means change the size of
    % 'image' of 'scale' times with method 'method'
    %'image' is the source image
    % 'scale' if 'scale'>1 it means to amplify the image with 'scale' times
    %       if 'scale' <1 it means to shrink the image with 'scale' times
    % 'method' if method = 'nearest' it will find the nearest point of 'image' to
    % write into resized
    %    else it means the 'bilinear' way
    %    All right reserved by Pengxc
    if strcmp(method, 'nearest')==1;
        % the first method
        [length,height,layer] = size(image);  % get the basic size of the image
        new_lenth  = length * scale;          % New lenth 
        new_height = height * scale;         % New height 
        new_lenth = floor(new_lenth);        % make it to int
        new_height = floor(new_height);      % make it to int
        
        %The code below is to find the nearest piont 
        for i = 1:new_lenth;
            for j = 1:new_height;
                
                remain_i = (i/scale) - floor(i/scale);
                % To see which side is nearer at x-label
                if remain_i >= 0.5
                    o_i = ceil(i/scale);
                else
                    o_i = floor(i/scale);
                    % When scale>1 and i =1 ,then o_i = 0,which is wrong,so
                    % make it equals 1
                    if o_i == 0;
                        o_i =1;
                    end
                end
                
                remain_j = (j/scale) - floor(i/scale);
                % To see which side is nearer at y-label
                if remain_j >= 0.5
                    o_j = ceil(j/scale);
                else
                    o_j = floor(j/scale);
                    if o_j == 0;
                    % When scale>1 and i =1 ,then o_i = 0,which is wrong,so
                    % make it equals 1
                        o_j =1;
                    end
                end
                
                for k =1:layer
                resized(i,j,k) = image(o_i,o_j,k);
                end
            end
        end
    end           
    if strcmp(method, 'bilinear')==1;   %    else it means the 'bilinear' way
        [lenth,height,layer] = size(image);  % the same as  above
        new_lenth = lenth * scale;
        new_height = height * scale;
        
        new_lenth = floor(new_lenth);
        new_height = floor(new_height);
        
        for i= 1 : lenth
            for j = 1 :height
                for k = 1: layer
                    temp_image(i,j,k) = image(i,j,k);
                    %temp_image has a row ans a column more than image
                end
            end
        end
        
        for i=1:lenth
            for k =1:layer
                temp_image(i,height+1,k) = 0;
                % add a column to keep from getting out of matrix 
            end
        end
        
        for j =1:height
            for k=1:layer
                temp_image(lenth+1,j,k)=0;
                % add a row to keep from getting out of matrix 
            end
        end
        
        % The code below use Bilinear to Calulate the value of the resized
        for i=1:new_lenth
            for j =1:new_height
                a = 0;
                b = 0;
                o_i = floor(i/scale);
                o_j = floor(j/scale);
                
                a = (i/scale) - floor(i/scale);
                b = (j/scale) - floor(j/scale);
                %a,b is the parameter, which will be detailly written in the Document
                if o_i == 0;
                    o_i = 1;a=0;
                end
                if o_j == 0;
                    o_j =1;b=0;
                end
                
                for k =1:layer
                    resized(i,j,k) = (1-a)*(1-b)*temp_image(o_i,o_j,k) +(1-a)*b*temp_image(o_i,o_j+1,k) + a*(1-b)*temp_image(o_i+1,o_j,k) +a*b*temp_image(o_i+1,o_j+1,k);
                end
            end
        end    
    end


    测试与结果:

    命令行敲入
    I = imread(‘football.jpg’);
    MSH=myimresize(I,0.7,’nearest’);
    SH = imredize(I,0.7,’nearest’);
    imshow(MSH);
    figure,imshow(SH);

    即可得到结果
    【matlab攻坚】用matlab对图片进行放大和缩小

    左图是本段代码对“nearest”方式缩小0.7倍的测试,右边是库函数

    展开全文
  • Matlab里的imresize函数可以对图像放大缩小,但这同时也会改变图像矩阵的大小,如果想要上图所示的结果,需要再进行一些处理,处理代码如下所示。 clc close all; % 从当前目录下打开一张图片 [filename, ...
  • MATLAB双三次插值实现图像放大;MATLAB实现图像旋转(双三次插值);MATLAB图像写入字母。内附完整代码&图像&文档。
  • 基于matlab的双线性插值法的图像放大缩小,有详细标注 基于matlab的双线性插值法的图像放大缩小,有详细标注
  • 数字图像处理课程project之图像缩放,MATLAB版 采用线性插值法和最邻近法两种算法 有GUI界面
  • 用set命令matlab缩小放大图片的方法在matlab里直接使用10.5大小的字体(5号字体),并调整图片的大小(50%),按厘米set(gcf,'Units','centimeters','position',[12 2 12 8]);set(gca,'xtick',-8:1:2,'ytick',[0:0.25:...
  • 半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用matlab重新再清楚的写一遍。 close all; clear all; clc; m=1.8; %放大...
  • 用set命令matlab缩小放大图片的方法在matlab里直接使用10.5大小的字体(5号字体),并调整图片的大小(50%),按厘米set(gcf,'Units','centimeters','position',[12 2 12 8]);set(gca,'xtick',-8:1:2,'ytick',[0:0.25:...
  • 图像几何变换之放大缩小(MATLAB)

    千次阅读 2020-06-07 21:44:14
    几何变换之放大缩小 概念 1.缩小:从图像中,删除部分像素; 2. 放大:向图像中增加部分像素,增加像素的取值是根据周围相邻像素的值进行插值计算得到的。 用法 调用格式: B = imresize(A,m) B = imresize(A,m,...
  • 对BMP图像进行放大及旋转的操作,实现图像成倍数的放大,并在水平面上进行任意角度的旋转。
  • zoomginput 激活 ginput 并允许放大/缩小活动轴使用鼠标滚轮。 向上滚动放大,向下滚动缩小。 所有其他功能与 ginput 相同。
  • 一、基于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的双线性插值法的图像放大缩小,有详细标注
  • 图像放大缩小matlab-第3篇) matlab代码 I=imread('rice.jfif'); [m,n]=size(I); J1=imresize(I,0.2); %缩小为0.2倍 J2=imresize(I,8,'nearest'); %最近邻放大8倍 J3=imresize(I,[8*m,8*n],'bilinear');%双线...
  • 实现任意彩色 灰度图像放大缩小 任意角度旋转
  • 1,放大;<1,缩小 A:缩放后的图像 I=imread('C:\Users\14372\Desktop\Music_pictures\图片\63567947_p0.jpg'); A=imresize(I,0.5); figure; imshow(I);title('原图'); figure; imshow(A);title('缩小0.5倍'); ...
  • matlab图像旋转和放大

    2012-12-05 17:13:59
    matlab GUI做的数字图像处理。 1) 对图像放大2倍、5倍,采用最近内插、二次线性内插、三次内插,比较其效果。 2) 对图像依次旋转30°、60°,及一次性旋转90°比较其效果。 3) 对图像依次旋转45°,采用最近内插...
  • MATLAB GUI刚开始学习不久,自己设计MATLAB GUI绘图时,绘制的曲线总是不能够像MATLAB自身的figure那样具有放大缩小等功能。后来查询资料才知道2018b以后提供了这样一个函数 axtoolbar 这个函数功能自行查阅即可 ...
  • matlab imresize对图像进行缩小放大

    万次阅读 2017-10-23 10:29:29
    matlab中函数imresize简介: ... m大于1, 则放大图像; m小于1, 缩小图像。 B = imresize(A, [numrows numcols]) numrows和numcols分别指定目标图像的高度和宽度。 显而易见,由于这种格式允许图像缩...
  • 利用图像内插法放大缩小图像 Matlab

    千次阅读 2017-03-13 22:27:28
    利用图像内插法放大缩小图像 Matlab内插是利用已知数据来估计未知位置的数值进行处理,基础的内插法有最近邻内插法,双线性内插法。本文将对灰度图并利用Matlab来仿真一下这两种方法。图像放大或缩小的原理是像素点...
  • matlab 局部图放大缩小

    千次阅读 2019-10-05 00:01:41
    原文地址:matlab画一个局部放大的图中图(总结)作者:swimmingfish 转引自:http://hi.baidu.com/���ھ�������ת��/blog/item/3b852a26400455b04623e89e.html 照旧感谢原作者,分享者们,...
  • 基于matlab GUI图像局部放大 二、源代码 function varargout = piczoom(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @...
  • 基于matlab的最临近插值法实现图像放大缩小

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,301
精华内容 920
关键字:

matlab图像放大缩小

matlab 订阅