医学图像处理——编写图像亮度变换函数

上期内容:医学图像处理——亮度变换函数

 一般来说,MATLAB中包含了大部分我们所需要的的函数。但是我们有时侯却会想着依据自己的想法创新一些函数,遇到此种情况时我们应该怎么办呢?答案如下!

 

理论基础

 

     图下所示的函数称为对比度拉伸变换函数,因为该函数可将输入值低于m的灰度级压缩为输出图像中较暗灰度级的较窄范围内,类似地,该函数可将输入值高于m的灰度级压缩为输出图像中亮度级较窄范围内。输出的是一幅具有高对比度的图像。而这种限制函数被称为阈值函数。

 

      现在小白就来根据上面的函数编写出在matlab中的这样一个亮度变换函数(其包含拉伸函数以及以及其他常用的亮度变换方法,如上节讲到的imjust),我们这里称其为“intrans”

 

intrans函数编写

 

  这里小白我直接上代码:

function g=intrans(f,varargin)

error(nargchk(2,4,nargin))

classin=class(f);

if strcmp(class(f),'double')&&max(f(:))>1&&min(f(:))<0&&strcmp(varargin{1},'log')

    f=mat2gray(f);

else

    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

                errorerror (' Incorrect number of inputs for the 1og 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')

        end

g=1./(1+(m./(f+eps)).^E);

        otherwise

            error('Unknow enhancement method')

        end

 

    这里主要说明几点:红色部分就是输入指定部分,它规定了此函数需要输入的参数,这里就是图像f,以及一个varargin数组用来规定M和E以及所用的亮度变换方法。这里绿色的部分用来检查输入参数的数目是否有错误。接下来就是对应不同方法的亮度变换方法的撰写,由Switch函数进行跳转。这里有着“neg”--负片转换、以imjust函数为主要方法的亮度调整方法、以及我们刚才讲到的拉伸函数(蓝字部分)。主体就是这样,是不是很简单?其他的小语句就是matlab常用语句,这个相信难不倒各位小聪明!

     接下来我们可以对编写的Trans函数进行使用验证一下!

f=imread("Fig0206(a).tif");

t=mean2(im2double(f));

g=intrans(f,'stretch',t,0.9);

g=im2uint8(g);

figure;

imshow(g);

小白在这里使用了stretch拉伸的方法,并传入了M、E两值(分别为t,0.9).效果图如下!

再来看看原图:

对比很清楚是不是?我们通过这样一个阈值函数拉伸处理后人体骨骼就很亮了!

 

小白今天的介绍就到这里啦!

内容很简单,但自己尝试一下会觉得很有意思哟,快动手试试吧!

可能会遇到bug,但不要放弃,小白也是这要改bug改出来的!

更多干货请关注微信公众号:医电小白的进阶之路

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值