intrans.m

%intrans源程序
function g=intrans(f,varargin)
%intrans执行灰度变换
%g=intrans(f,'neg')计算图像f的负片
%g=intrans(f,'log',c,class)如果后两个参数是忽略的,则默认为1.
%因为log经常被用来展示傅里叶变换。参数的类型经常是uint8或uint16。如果参数类型被忽略,输出与输入是相同类型的。

%g=intrans(f,'gamma',gam)使用参数gam进行伽马变换
%g=intrans(f,'stretch',m,e)进行对比度拉伸变换,参数m的范围是[0,1]。m的默认值是mean2,e的默认值是4.

%对于负片变换,伽马变换,对比度拉伸变换,双精度输入图像的最大值大于1必须使用mat2gray进行缩放。其他图像先转换为double.
%对于对数变换,double图像不需要进行缩放再变换,其他类型必须先使用im2double转换为double类。

%输出与输入是相同类型的,除了指定类型是'log'.

%核实输入数的正确性
error(nargchk(2,4,nargin))

%储存输入的类型
classin=class(f);

%如果输入的类型是双精度类型,它的输出范围是[0,1]。若指定的变换不是'log',则把转化输入范围到[0,1]。
if strcmp(class(f),'double') & max(f(:))>1 & ~strcmp(varargin{1},'log')
    f=mat2gray(f);
else%转换类型为double,除了f的类型
    f=im2double(f);
end

%转换的类型是指定的
method=varargin{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=varargin{3};
        else
            error('Incorrect number of inputs for the log option.')
        end
        g=c*(log(1+double(f)));
    case 'gamma'
        if length(varargin)<2
            error('Not enough inputs for the gamma option.')
        end
        gam=varargin{2};
        g=imadjust(f,[],[],gam);
    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 stretch option.')
        end
        g=1./(1+(m./(f+eps)).^E);
    otherwise
        error('Unknown enhancement method.')
end

%转换输入图像的类型
g=changeclass(classin,g);
                 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值