zoukankan      html  css  js  c++  java
  • Matlab 中的 wcodemat 有什么作用?

    在图像处理中,有时候会看到一些矩阵在显示之前,会使用一个 wcodemat 函数做转换,再转 uint8 进行显示,但这到底起到什么作用呢?下面来一探究竟。

    源码解读

    通过在 Matlab 命令行窗口中输入下面的命令并回车,打开该函数的源文件。

    open wcodemat
    

    聚焦到第 37 行开始的代码,以及第 61 行代码

    ...
    if absol , x = abs(x); end
    switch opt
        case 'm'
            y = ones(size(x));
            x = x - min(x(:));
            maxx  = max(x(:));
            if maxx<eps , return; end
            x = nb*(x/maxx);
            y(:) = 1 + fix(x);
    ...
    y(y>nb) = nb;
    ...
    

    这部分关键代码,就是整个转换数据的主要流程。

    • 首先,将数据取绝对值
    • 然后,将上一步的数据整体减去最小值,于是数据整体被搬迁到了以最小值为原点的坐标轴上
    • 再求取数据的最大值,作为分母,各数据作为分子,相除实现数据在整体取值范围上的占比计算(即归一化操作)
    • 接着将其乘以一个转换值 nb ,并向零点方向取整,加上 1,从而将数据重新映射到编码目标范围
    • 最后对于溢出的部分重新置为最大目标值 nb

    简单实现 wcodemat

    根据以上分析,我们可以写出相同的功能的函数 mycodemat

    function y = mycodemat(x,nb)
    % 求新的数列:取绝对值->原点对齐
    x1 = abs(x);
    x1_min = min(x1);
    x2 = x1 - x1_min;
    % 重新编码:归一化->映射到新的区间(1-nb)
    x2_max = max(x2);
    y = 1 + fix(nb*x2/x2_max); % fix 表示向零点方向取整 x --> 0 <-- x
    % 溢出处理:大于 nb 的置为 nb
    y(y>nb) = nb;
    end
    

    对比与分析

    最后,我们来对比一下自己编写的 mycodemat 与 wcodemat 的运行结果是否一致

    clear;close all;clc
    
    x = rand(10,1); % 随机生成一组数据
    y1 = wcodemat(x,32);
    y2 = mycodemat(x,32);
    isequal(y1,y2)
    

    运行结果为 1 ,即二者完全一致!

    总的来说,该函数功能就是将任意的源数据编码到一个取值为 1 到 nb 的正整数范围下,而图像处理中经常出现各种小数、负数等情况,但为了合理的显示,需要转换到适当的整数范围中。这时一般 nb 就是 255,即 256 灰度级。通常灰度级的获取根据图像的索引矩阵长度或者自行设置。所以你会经常看到类似下面的这种代码

    nbcol = size(map,1)	% 根据map获取图像灰度级色谱
    ....
    img = ....
    imshow(uint8(wcodemat(img,nbcol))) % 图像编码到1-255,并以unit8格式显示
    ....
    

    参考资料

    © 版权声明
    文章版权归作者所有,未经允许请勿转载。
  • 相关阅读:
    常用排序算法(JAVA版)
    常用排序算法(PHP)
    POJ 1308 hdu 1325 Is It A Tree?【并查集+入度 判断一个有向图是树】
    【转】常用的正则表达式
    POJ 1611 The Suspects【并查集入门】
    POJ 2524 Ubiquitous Religions【并查集入门】
    归并排序和快速排序比较【算法设计与分析实验报告】
    2013_CSUST_3_23校内训练赛第一场【old】【hdu 3496、2191、4508、4506、2181 POJ 3264 3210 3094】
    POJ 3264 Balanced Lineup 【RMQ求区间最值模板题】
    搜索专题训练【CSUST_Newer_12级入门】
  • 原文地址:https://www.cnblogs.com/gshang/p/14774291.html
Copyright © 2011-2022 走看看