zoukankan      html  css  js  c++  java
  • Matlab 图像平移、旋转、缩放、镜像

    今天学习了用Matlab实现对图像的基本操作。在Matlab中,图像是按照二维矩阵的形式表示的。所以对图像的操作就是对矩阵的操作。 

    对图像进行缩放、平移、旋转,都可以转化为矩阵的运算。 
    关于变换矩阵的构造,请参考: 
    《 [gym 101047C Robotics Competition] 矩阵快速幂求解点旋转平移N次之后的位置》 
    参考原图: 
    原图

    1. 图像平移

    init = imread('Fig3.tif'); % 读取图像
    [R, C] = size(init); % 获取图像大小
    res = zeros(R, C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
    delX = 50; % 平移量X
    delY = 50; % 平移量Y
    tras = [1 0 delX; 0 1 delY; 0 0 1]; % 平移的变换矩阵 
    
    for i = 1 : R
        for j = 1 : C
            temp = [i; j; 1];
            temp = tras * temp; % 矩阵乘法
            x = temp(1, 1);
            y = temp(2, 1);
            % 变换后的位置判断是否越界
            if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
                res(x, y) = init(i, j);
            end
        end
    end;
    
    imshow(uint8(res)); % 显示图像

    图像平移

    2. 图像旋转

    init = imread('Fig3.tif'); % 读取图像
    [R, C] = size(init); % 获取图像大小
    res = zeros( R,  C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
    
    alfa = -15 * 3.1415926 / 180.0; % 旋转角度
    tras = [cos(alfa) -sin(alfa) 0; sin(alfa) cos(alfa) 0; 0 0 1]; % 旋转的变换矩阵
    
    for i = 1 : R
        for j = 1 : C
            temp = [i; j; 1];
            temp = tras * temp;% 矩阵乘法
            x = uint16(temp(1, 1));
            y = uint16(temp(2, 1));
            % 变换后的位置判断是否越界
            if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
                res(i, j) = init(x, y);
            end
        end
    end;
    
    imshow(uint8(res));  % 显示图像

    图像旋转

    3. 图像缩放

    init = imread('Fig3.tif'); % 读取图像
    [R, C] = size(init); % 获取图像大小
    timesX = 3; % X轴缩放量
    timesY = 3; % Y轴缩放量
    res = zeros(timesX * R, timesY * C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
    tras = [1/timesX 0 0; 0 1/timesY 0; 0 0 1]; % 缩放的变换矩阵 
    
    for i = 1 : timesX * R
        for j = 1 : timesY * C
            temp = [i; j; 1];
            temp = tras * temp; % 矩阵乘法
            x = uint8(temp(1, 1));
            y = uint8(temp(2, 1));
            % 变换后的位置判断是否越界
            if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
                res(i, j) = init(x, y);
            end
        end
    end;
    
    imshow(uint8(res)); % 显示图像

    图像缩放

    4. 图像镜像(水平)

    init = imread('Fig3.tif');
    [R, C] = size(init);
    res = zeros(R, C);
    
    for i = 1 : R
        for j = 1 : C
            x = i;
            y = C - j + 1;
            res(x, y) = init(i, j);
        end
    end
    
    imshow(uint8(res));

    图像镜像

  • 相关阅读:
    DRF项目创建流程(1)
    RESTful API规范
    超哥笔记--shell 基本命令(4)
    转:django模板标签{% for %}的使用(含forloop用法)
    自定django登录跳转限制
    jquery Ajax应用
    js重定向跳转页面
    django项目mysql中文编码问题
    python进阶(六) 虚拟环境git clone报错解决办法
    Linux基础(六) Vim之vundle插件
  • 原文地址:https://www.cnblogs.com/Ph-one/p/11566673.html
Copyright © 2011-2022 走看看