一个用于灰度标定的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中gscale函数——M文件

function g=gscale(f,varargin) if length(varargin)==0   method='full8'; else method=varargin{1}; ...

gscale

一、处理可变数量的输入和输出 利用nargin和nargout进行检测 T = testhv(4, 5) 该函数体中使用nargin返回2,使用nargout返回...
  • chezhai
  • chezhai
  • 2016年11月19日 10:27
  • 585

基于梯度调整的矩不变自动阈值图像分割算法

基于梯度调整的矩不变自动阈值图像分割算法来源:电子技术应用  作者:罗诗途 罗飞路 张王已 王艳玲摘要:提出了一种改进的矩不变自动阈值算法。该算法针对矩不变自动阈值法忽略图像细节的缺点,在矩不变自动阈...
  • byxdaz
  • byxdaz
  • 2006年03月16日 13:21
  • 4162

图像锐化 边缘检测的一些基础知识

互联网兴起, 生活节奏飞速,快餐成了favorite。理论学习也受到了巨大的冲击,一些不明所以的冰冷的公式和整段可以运行的代码是很多人的最爱。使得原本应该沉静的软件开发变得异常浮躁,(当然很多博客也成...
  • hhygcy
  • hhygcy
  • 2009年07月29日 14:04
  • 10541

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

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

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

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

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

imadjust从用法到原理—Matlab灰度变换函数之一 转摘网址:http://blog.sina.com.cn/s/blog_14d1511ee0102ww6s.html   im...

图像的灰度共生矩阵GLCM(matlab 函数帮助)

转自:http://blog.csdn.net/linxue968/article/details/6034754 Gray-level co-occurrence matrix from an...

graycomatrix 计算(图像)灰度共生矩阵(CLCM)——matlab相关函数说明,很详细

matlab函数: graycomatrix() 功           能:创建灰度共生矩阵 Gray-level co-occurrence matrix from an image ...
  • todayq
  • todayq
  • 2014年10月20日 10:30
  • 3584

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

imadjust函数是MATLAB的一个工具箱函数,一般的语法调用格式为: f1=imadjust(f,[low_in  high_in],[low_out  high_out],gamma) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个用于灰度标定的matlab函数
举报原因:
原因补充:

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