一个用于灰度标定的matlab函数

转载 2015年11月19日 19:13:37

       处理图像时,导致像素值跨越由负数到正数的较宽范围的计算是很常见的(我们在计算的时候一般都是用的double类型哈)。尽管在中间计算过程中不会导致问题,但当我们想要利用8位(uint8)或16位(uint16)格式保存或观看一幅图像时,就会出现问题(负数部分可能会丢失?)。在这种情况下,我们通常希望把图像标度在[0,255]或者[0,65535]之间。下面的称为gscale的自定义函数,就能实现此项功能,此外,该函数能将输出灰度级映射到一个指定的范围。

      函数使用格式为: g=scale(f,method,low,high)

      其中,f是被标定的图像,method的有效值是'full8'(默认)和'full16'或者'minmax','full80'表示输出的指定范围为[0,255],而'full16'把输出标定为[0,65535]。如果使用这两个值之一,那么后面的low,high参数将会被忽略。 选用minmax,则必须提供后面的两个参数low和high。(low和high限定在[0,1]之间,但是程序本身会根据输入的类别做出适当的标定,然后将输出转换为与输入f相同的类型,例如,f是uint8类型,'minmax'的[low,high]为[0,0.5],则输出图像同样为uint8类型,其值在[0,128]范围)。若输入图像f为double类型,且其值在[0,1]之外,那么程序在运行的第一步会将其转换到[0,1]范围内。

    代码如下:

    

functon g=gscale(f,vargin)
% g=gscale(f,'full8')scales the intensities of f to the full 8-bit
% intensity range [0,255].This is the default if there is only one input
% argument.
% g=gscale(f,'full16')scales the intensities of f to the full 16-bit
% intensity range [0,65535].
% g=gscale(f,'minmax',low,high) scales the intensities of f to the
% range[low,high].These values must be provided,and the must be in the
% range [0,1],independently of the class of the input f. Gscale performs
% any necessary scaling. If the input is of class double, and its values
% are not in the range [0,1],then this function scales it to [0,1] at
% first.
% The class of the output is the same as the class of input.
if isempty(vargin) %if there is only one parameter,it must be f.
    method='full8';
else
    method=varargin{1};
end

if strcmp(class(f),'double')&&(max(f(:))>1||min(f(:))<0)
    f=mat2gray(f); 
end   %if the class of f is double and it's not in the range [0,1],scale f to the range[0,1]

switch method 
    case 'full8'
        g=im2uint8(mat2gray(double(f)));
    case 'full16'
        g=im2uint16(mat2gray(double(f)));
    case 'minmax'
        low=varargin{2};
        high=varargin{3};
        if low>1||low<0||high>1||high<0
            error('Parameters low and high must be in the range [0,1]')
        end
        if strcmp(class(f),'double')
            low_in=min(f(:));
            high_in=max(f(:));
        elseif strcmp(class(f),'uint8')
            low_in = double(min(f(:)))./255;
            high_in = double(max(f(:)))./255;
        elseif strcmp(class(f),'uint16')
            low_in = double(min(f(:)))./65535;
            high_in = double(max(f(:)))./65535;
        end
        %imadjust automatically matches the class of the input
        g= imadjust(f,[low_in high_in],[low high]);
    otherwise
        error('unknown method.')
end
    

相关文章推荐

MATLAB中将彩色的图像转化为灰度图像

MyYuanLaiPic = imread(e:/image/matlab/darkMouse.jpg);%读取RGB格式的图像MyFirstGrayPic = rgb2gray(MyYuanLaiP...
  • wsywl
  • wsywl
  • 2009-10-30 19:14
  • 58992

Matlab相机标定

转自:http://blog.csdn.net/hyacinthkiss/article/details/41317087 MATLAB标定工具箱的使用     用VS20...

双目标定之Matlab 2015工具箱标定步骤

经典的标定方式,相信大家一定不陌生,也就是手动标定,不仅麻烦,而且还很费时间、精力,最后得到的结果还不一定准确。然后使用Matlab 2015的标定工具箱进行标定,比较省事,相对来说,结果比较准确。但...

Matlab标定工具箱使用教程

Matlab标定工具箱使用教程这个教程将带你完整地利用20到25张平面棋盘格图像进行相机标定。 这个教程将让你学会如何使用所有工具箱的特征:载入图像、提取图像角点、运行标定引擎、显示结果、控制精度 添...

数字图像处理——Matlab GUI与灰度变换函数

数字图像处理——Matlab GUI与灰度变换函数简介Matlab具有强大的函数运算功能,利用这一点可以进行像素级的计算,也就是图像处理。这款软件基于Matlab平台,用户可以在软件界面中打开需要修改...

Matlab图像处理之灰度变换函数

首先明确几个概念 1,灰度:对于通常所谓的黑白图像,把黑色和白色之间按对数关系分为若干等级称为灰度。灰度分为256阶,用灰度表示的图像称作灰度图.在图像中用0~255表示,0是全黑,255是全白 2....

imadjust从用法到原理—Matlab灰度变换函数之一

imadjust函数是MATLAB的一个工具箱函数,一般的语法调用格式为: f1=imadjust(f,[low_in  high_in],[low_out  high_out],gamma) ...

用于灰度变换的一些实用M函数

用于灰度变换的一些实用M函数 1、处理可变数量的输入和/或输出:                 函数:nargin:为检测输入到M函数的参量数目     ...

Matlab一个利用神经网络拟合函数的例子

代码:t=[0 3.9 4.1 7.3 8.4 13.1 14.8 16.4 17.7 19 19.7 20.3 21.2 24.5 26.3 27.8 28.9 29 29.8 31.1 32.8 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)