Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1645113
  • 博文数量: 245
  • 博客积分: 10378
  • 博客等级: 上将
  • 技术积分: 2571
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 08:19
文章分类

全部博文(245)

文章存档

2013年(4)

2012年(8)

2011年(13)

2010年(68)

2009年(152)

分类:

2010-07-27 09:29:36

此函数模版摘自冈萨雷斯数字图像处理MATLAB版,内容包括函数格式,输入参数处理等
 
 

function out=test(in,varargin)
%
%
% just for test
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 输入参数个数检测,重要的函数有nargin nargout  nargchk,

%分别用来返回函数的输入参数个数、输出参数个数、检查参数。
error(nargchk(2,4,nargin));

%检测变量类型,返回类型为字符串类型,如果要比较字符串可以使用

%类似c语言的函数 strcmp函数
classin=class(f);

% 这里要注意的是符号'...',MATLAB中有物理行和逻辑行的定义,如果

%一个逻辑行不能容纳一个物理行,可以使用‘...’来换行

%同样,MATLAB可以使用逻辑表达式来完成严格的逻辑。例如本例中的&


if strcmp( classin,'double') & max( f(:) ) >10 ...
        ~strcmp( varargin{1},'log' )
    f=mat2gray(f);
else
    f=im2double(f);
end

 

%注意参数数组varargin,这个一个数组,要和矩阵相区别开来。

%MATLAB的多参数和变参数输入就是在这里完成的。

method=vararg{1};

switch method
    case 'neg'
        g=imcomplement(f);
    case 'log'
        if length(varargin)==1
            c=1;
        elseif length(varargin)==2
            c=varargin{2};
        elseif length(varargin)==3
            c=varargin{2};
            classin=vararg{3};
        else
            error( 'Incorrect number of inputs for the log option')
        end
        g=imadjust(f,[],[],gam);
    case 'gama'
        if length(varargin)<2
            error(' Not enough inputs for the gama option')
        end
        gam=varargin{2};
        g=imadjust(f,[],[],gama);
    case 'stretch'
        if length(varargin)==1
            m=mean2(f);
            E=4.0;
        elseif length(varargin)==3
            m=varargin{2};
            E=varargin{3};
        else
            error(' Incorrect number of inputs for the strech option');
        end
    otherwise
        error(' unknown enhancement method')
end

g=changeclass(classin,g);

 

注意nargin  nargout  nargchk,和varargin等。以后各种函数的编写就可以按照这个模版进行了。

阅读(1055) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~