• [MATLAB]Debut-不知名的线性变换


    有了参加建模竞赛的想法后,断断续续的学了一阵Matlab,始终没做出什么好玩的东西..恰好今天上高等代数课时,杨家忠教授提到说他中午在休息室里倒腾一个特殊的矩阵。貌似和图像处理有点关系,于是乎下课后就尝试拿Matlab来实现一下这个简单的线性变换。(算是MATLAB处女作了…)

    1.问题分析

    杨教授提到的矩阵就是这个..我倒是没看出什么特别之处,显然是因为我数学水平还是太太太太low

    $egin{equation}
    D=left(
    egin{matrix}
    1&2&\
    -1&4&\
    end{matrix}
    ight)
    end{equation}
    $

    对这个矩阵做如下运算

    $egin{equation}
    D'=left( k*E +
    left[
    egin{matrix}
    1&2&\
    -1&4&\
    end{matrix}
    ight]
    ight)=
    left[
    egin{matrix}
    1+k&2&\
    -1&4+k&\
    end{matrix}
    ight]
    end{equation}$

    对图像坐标数据做如下线性变换。据说改变K值就会有好玩的现象出现

    $egin{equation}
    left[
    egin{matrix}
    x'&\
    y'&\
    end{matrix}
    ight]=
    left[
    egin{matrix}
    1k&2&\
    -1&4k&\
    end{matrix}
    ight]*
    left[
    egin{matrix}
    x&\
    y&\
    end{matrix}
    ight]
    end{equation}
    $

    另,注意到

    $egin{equation}
    detleft( D' ight)=
    left( k+2 ight)*
    left( k+3 ight)
    end{equation}
    $

    k=-2和k=-3时应该会有有趣的事情发生…

    目标是对北航校徽进行如上线性变换…实现方法如下

    • 读取一张logo.jpg(北航校徽)
    • 将图片二值化,得到一个logical类型的268*268矩阵(由图像大小决定)
    • 遍历该矩阵,读取False点,构造两个坐标向量分别对应x轴/y轴坐标
    • 利用for循环,以0.1为步长依次转换-绘制,配合Pause得到动态图

    2.代码实现

    A=[1,2;-1,4];
    E=[1,0;0,1];
    imgRgb =imread('logo.jpg');
    thresh = graythresh(imgRgb); 
    I2 = im2bw(imgRgb,thresh);
    pos=[0;0];
    hold off  
    for i=1:1:268
        for j=1:1:268
            if I2(i,j)==0
                pos=[pos,[i;j]];
            end
        end
    end
     for h=11:-0.1:-10
       R=(h*E+A)*pos;
       p=plot(R(1,:),R(2,:),'.');
        axis equal
       legend(strcat('h=',num2str(h)))
       pause(0.001);
    end

    3.后记

    高等代数确实很有意思…华章教育Leon那本线性代数教材上讲了不少高代的有趣应用,够玩儿好一阵呢..

    Ps:本文中的数学公式由著名的Latex编写而成.(Warning:学习Latex可能会导致学习者出现焦虑/狂躁等症状)

    PPS:另附本代码中的测试图片logo.jpg及效果图

  • 相关阅读:
    spring core源码解读之ASM4用户手册翻译之一asm简介
    nginx启动,重启,关闭命令
    linux LVM分区查看dm设备
    jdbc 对sqlite的基本操作
    linux配置多个ip
    细说Linux下的虚拟主机那些事儿
    打造字符界面的多媒体Linux系统
    linux计划crontab
    因修改/etc/ssh权限导致的ssh不能连接异常解决方法
    Linux修改主机名
  • 原文地址:https://www.cnblogs.com/cn-lhc/p/6150753.html
Copyright © 2020-2023  润新知