医学图像处理基本函数代码部分.docx

上传人:b****8 文档编号:10288629 上传时间:2023-02-09 格式:DOCX 页数:38 大小:18.63KB
下载 相关 举报
医学图像处理基本函数代码部分.docx_第1页
第1页 / 共38页
医学图像处理基本函数代码部分.docx_第2页
第2页 / 共38页
医学图像处理基本函数代码部分.docx_第3页
第3页 / 共38页
医学图像处理基本函数代码部分.docx_第4页
第4页 / 共38页
医学图像处理基本函数代码部分.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

医学图像处理基本函数代码部分.docx

《医学图像处理基本函数代码部分.docx》由会员分享,可在线阅读,更多相关《医学图像处理基本函数代码部分.docx(38页珍藏版)》请在冰豆网上搜索。

医学图像处理基本函数代码部分.docx

医学图像处理基本函数代码部分

Procedurecsh(bp:

Tbitmap);//临时变量初始化函数

begin

//临时图像变量初始化

tp.Free;

tp:

=Tbitmap.Create;

tp.Width:

=bp.Width;

tp.Height:

=bp.Height;

tp.PixelFormat:

=pf24bit;

tp.Assign(bp);

end;

Procedurecsh2();//临时变量初始化函数

begin

//临时图像变量初始化

tp.Free;

tp:

=Tbitmap.Create;

tp.Width:

=bp.Width;

tp.Height:

=bp.Height;

tp.PixelFormat:

=pf24bit;

end;

Functionxxbh(k:

double;b:

integer):

Tbitmap;//线性变换

var

i,j:

integer;

p:

PByteArray;

begin

//临时变量初始化

csh(bp);

forj:

=0totp.Height-1do

begin

p:

=tp.ScanLine[j];

fori:

=0totp.Width-1do

begin

p[i*3+2]:

=bjkz(floor(k*p[i*3+2]+b));

p[i*3+1]:

=bjkz(floor(k*p[i*3+1]+b));

p[i*3]:

=bjkz(floor(k*p[i*3]+b));

end;

end;

result:

=tp;

end;

 

Functionbjkz(n:

integer):

integer;//边界控制函数

begin

result:

=max(min(n,255),0);

end;

Functiondshs(x:

integer;a,b,c:

double):

integer;//对数函数

begin

result:

=bjkz(floor(b*368*ln(c*x/255+1)+a));

end;

Functiondsbh(a,b,c:

double):

Tbitmap;//对数变换

var

i,j:

integer;

p:

PByteArray;

begin

//临时变量初始化

csh(bp);

//图像对数变换

forj:

=0totp.Height-1do

begin

p:

=tp.ScanLine[j];

fori:

=0totp.Width-1do

begin

p[i*3+2]:

=dshs(p[i*3+2],a,b,c);

p[i*3+1]:

=dshs(p[i*3+1],a,b,c);

p[i*3]:

=dshs(p[i*3],a,b,c);

end;

end;

result:

=tp;

end;

Functionzshs(x:

integer;a,b,c:

double):

integer;//指数函数

begin

result:

=bjkz(floor(128*power(b,c*((x-a)/255))-1));

end;

Functionzsbh(a,b,c:

double):

Tbitmap;//指数变换

var

i,j:

integer;

p:

PByteArray;

begin

//临时变量初始化

csh(bp);

forj:

=0totp.Height-1do

begin

p:

=tp.ScanLine[j];

fori:

=0totp.Width-1do

begin

p[i*3+2]:

=zshs(p[i*3+2],a,b,c);

p[i*3+1]:

=zshs(p[i*3+1],a,b,c);

p[i*3]:

=zshs(p[i*3],a,b,c);

end;

end;

result:

=tp;

end;

Functionkchs(x:

integer;c,w:

double):

integer;//开窗函数

begin

result:

=bjkz(floor(255*(x-c)/w));

end;

Functionkcbh(c,w:

double):

Tbitmap;//开窗变换

var

i,j:

integer;

p:

PByteArray;

begin

//临时变量初始化

csh(bp);

//图像对数变换

forj:

=0totp.Height-1do

begin

p:

=tp.ScanLine[j];

fori:

=0totp.Width-1do

begin

p[i*3+2]:

=kchs(p[i*3+2],c,w);

p[i*3+1]:

=kchs(p[i*3+1],c,w);

p[i*3]:

=kchs(p[i*3],c,w);

end;

end;

result:

=tp;

end;

 

Functionhzft(tp:

Tbitmap;n:

integer):

Tbitmap;//画直方图函数

var

zft:

Array[0..255]ofinteger;//定义数组

i,j,gray,max:

integer;

p:

PByteArray;

begin

fori:

=0to255do

begin

zft[i]:

=0;

end;

forj:

=0totp.Height-1do

begin

p:

=tp.ScanLine[j];

fori:

=0totp.Width-1do

begin

gray:

=floor(0.3*p[i*3+2]+0.59*p[i*3+1]+0.11*p[i*3]);//计算灰阶

ifn=0thenzft[gray]:

=zft[gray]+1;

ifn=1thenzft[p[i*3+2]]:

=zft[p[i*3+2]]+1;

ifn=2thenzft[p[i*3+1]]:

=zft[p[i*3+1]]+1;

ifn=3thenzft[p[i*3]]:

=zft[p[i*3]]+1;

end;

end;

max:

=1;

fori:

=1to254do//去掉0和255

begin

ifmax

=zft[i];

end;

zftmap.Free;

zftmap:

=Tbitmap.Create;

zftmap.Height:

=100;

zftmap.Width:

=258;

zftmap.PixelFormat:

=pf24bit;

ifn=0thenzftmap.Canvas.Pen.Color:

=clBlack;//定义画笔颜色

ifn=1thenzftmap.Canvas.Pen.Color:

=clRed;

ifn=2thenzftmap.Canvas.Pen.Color:

=clGreen;

ifn=3thenzftmap.Canvas.Pen.Color:

=clBlue;

fori:

=0to255do//绘制直方图

begin

zftmap.Canvas.MoveTo(i+1,zftmap.Height);

zftmap.Canvas.LineTo(i+1,zftmap.Height-(zft[i]*zftmap.Heightdivmax));

end;

result:

=zftmap;

end;

 

Functiontxfx(tmap:

Tbitmap):

Tbitmap;//图像反相函数

var

i,j:

integer;

p:

PByteArray;

begin

//ifbp=nilthenexit;//未载入图像时运行反相按钮的错误解决

forj:

=0totmap.Height-1do

begin

p:

=tmap.ScanLine[j];

fori:

=0totmap.Width-1do

begin

p[i*3]:

=notp[i*3];//蓝

p[i*3+1]:

=notp[i*3+1];//绿

p[i*3+2]:

=notp[i*3+2];//红

end;

end;

result:

=tmap;

end;

Functionjzlb():

Tbitmap;//均值滤波函数

var

i,j:

integer;

p1,p2,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

//均值滤波

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p2:

=bp.ScanLine[j];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

p[i*3+2]:

=floor((p1[(i-1)*3+2]+p1[i*3+2]+p1[(i+1)*3+2]+

p2[(i-1)*3+2]+p2[i*3+2]+p2[(i+1)*3+2]+

p3[(i-1)*3+2]+p3[i*3+2]+p3[(i+1)*3+2])div9);

p[i*3+1]:

=floor((p1[(i-1)*3+1]+p1[i*3+1]+p1[(i+1)*3+1]+

p2[(i-1)*3+1]+p2[i*3+1]+p2[(i+1)*3+1]+

p3[(i-1)*3+1]+p3[i*3+1]+p3[(i+1)*3+1])div9);

p[i*3+0]:

=floor((p1[(i-1)*3+0]+p1[i*3+0]+p1[(i+1)*3+0]+

p2[(i-1)*3+0]+p2[i*3+0]+p2[(i+1)*3+0]+

p3[(i-1)*3+0]+p3[i*3+0]+p3[(i+1)*3+0])div9);

end;//i

end;//j

result:

=tp;

end;

Functionjqlb(a0,a1,a2,a3,a4,a5,a6,a7,a8:

integer):

Tbitmap;//加权滤波函数

var

i,j:

integer;

p1,p2,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

//加权滤波

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p2:

=bp.ScanLine[j];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

p[i*3+2]:

=floor((1*p1[(i-1)*3+2]+2*p1[i*3+2]+1*p1[(i+1)*3+2]+

2*p2[(i-1)*3+2]+4*p2[i*3+2]+2*p2[(i+1)*3+2]+

1*p3[(i-1)*3+2]+2*p3[i*3+2]+1*p3[(i+1)*3+2])div16);

p[i*3+1]:

=floor((1*p1[(i-1)*3+1]+2*p1[i*3+1]+1*p1[(i+1)*3+1]+

2*p2[(i-1)*3+1]+4*p2[i*3+1]+2*p2[(i+1)*3+1]+

1*p3[(i-1)*3+1]+2*p3[i*3+1]+1*p3[(i+1)*3+1])div16);

p[i*3+0]:

=floor((1*p1[(i-1)*3+0]+2*p1[i*3+0]+1*p1[(i+1)*3+0]+

2*p2[(i-1)*3+0]+4*p2[i*3+0]+2*p2[(i+1)*3+0]+

1*p3[(i-1)*3+0]+2*p3[i*3+0]+1*p3[(i+1)*3+0])div16);

end;//i

end;//j

result:

=tp;

end;

Functionjjlb(a0,a1,a2,a3,a4,a5,a6,a7,a8:

integer):

Tbitmap;//加权滤波函数

var

i,j,sum:

integer;

p1,p2,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

sum:

=a0+a1+a2+a3+a4+a5+a6+a7+a8;

//卷值滤波

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p2:

=bp.ScanLine[j];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

p[i*3+2]:

=floor((a0*p1[(i-1)*3+2]+a1*p1[i*3+2]+a2*p1[(i+1)*3+2]+

a3*p2[(i-1)*3+2]+a4*p2[i*3+2]+a5*p2[(i+1)*3+2]+

a6*p3[(i-1)*3+2]+a7*p3[i*3+2]+a8*p3[(i+1)*3+2])divsum);

p[i*3+1]:

=floor((a0*p1[(i-1)*3+1]+a1*p1[i*3+1]+a2*p1[(i+1)*3+1]+

a3*p2[(i-1)*3+1]+a4*p2[i*3+1]+a5*p2[(i+1)*3+1]+

a6*p3[(i-1)*3+1]+a7*p3[i*3+1]+a8*p3[(i+1)*3+1])divsum);

p[i*3+0]:

=floor((a0*p1[(i-1)*3+0]+a1*p1[i*3+2]+a2*p1[(i+1)*3+2]+

a3*p2[(i-1)*3+0]+a4*p2[i*3+0]+a5*p2[(i+1)*3+0]+

a6*p3[(i-1)*3+0]+a7*p3[i*3+0]+a8*p3[(i+1)*3+0])divsum);

end;//i

end;//j

result:

=tp;

end;

Functionzzpx(a0,a1,a2,a3,a4,a5,a6,a7,a8:

integer):

integer;//中值排序函数

var

i,j,t:

integer;

b:

Array[0..8]ofinteger;

begin

//对数组赋初始值

b[0]:

=a0;b[1]:

=a1;b[2]:

=a2;

b[3]:

=a3;b[4]:

=a4;b[5]:

=a5;

b[6]:

=a6;b[7]:

=a7;b[8]:

=a8;

//排序

fori:

=0to7do

begin

forj:

=i+1to8do

begin

ifb[j]>b[i]then

begin

t:

=b[i];

b[i]:

=b[j];

b[j]:

=t;

end;

end;

end;

result:

=b[4];

end;

Functionzzlb():

Tbitmap;//中值滤波函数

var

i,j:

integer;

p1,p2,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

//中值滤波

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p2:

=bp.ScanLine[j];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

p[i*3+2]:

=zzpx(p1[(i-1)*3+2],p1[i*3+2],p1[(i+1)*3+2],

p2[(i-1)*3+2],p2[i*3+2],p2[(i+1)*3+2],

p3[(i-1)*3+2],p3[i*3+2],p3[(i+1)*3+2]);

p[i*3+1]:

=zzpx(p1[(i-1)*3+1],p1[i*3+1],p1[(i+1)*3+1],

p2[(i-1)*3+1],p2[i*3+1],p2[(i+1)*3+1],

p3[(i-1)*3+1],p3[i*3+1],p3[(i+1)*3+1]);

p[i*3+0]:

=zzpx(p1[(i-1)*3+0],p1[i*3+0],p1[(i+1)*3+0],

p2[(i-1)*3+0],p2[i*3+0],p2[(i+1)*3+0],

p3[(i-1)*3+0],p3[i*3+0],p3[(i+1)*3+0]);

end;//i

end;//j

result:

=tp;

end;

 

Functionrob2():

Tbitmap;//robert算子全通道

var

i,j:

integer;

p1,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

//全通道

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

p[i*3+2]:

=max(abs(p1[(i+1)*3+2]-p3[(i-1)*3+2]),abs(p1[(i-1)*3+2]-p3[(i+1)*3+2]));

p[i*3+1]:

=max(abs(p1[(i+1)*3+1]-p3[(i-1)*3+1]),abs(p1[(i-1)*3+1]-p3[(i+1)*3+1]));

p[i*3+0]:

=max(abs(p1[(i+1)*3+0]-p3[(i-1)*3+0]),abs(p1[(i-1)*3+0]-p3[(i+1)*3+0]));

end;//i

end;//j

result:

=tp;

end;

Functionrob3():

Tbitmap;//robert算子灰度

var

i,j,gray:

integer;

p1,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

//全通道

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

gray:

=floor((max(abs(p1[(i+1)*3+2]-p3[(i-1)*3+2]),abs(p1[(i-1)*3+2]-p3[(i+1)*3+2]))+

max(abs(p1[(i+1)*3+1]-p3[(i-1)*3+1]),abs(p1[(i-1)*3+1]-p3[(i+1)*3+1]))+

max(abs(p1[(i+1)*3+0]-p3[(i-1)*3+0]),abs(p1[(i-1)*3+0]-p3[(i+1)*3+0])))/3);

p[i*3+2]:

=gray;

p[i*3+1]:

=gray;

p[i*3+0]:

=gray;

end;//i

end;//j

result:

=tp;

end;

Functionrob4(yz:

integer):

Tbitmap;//robert算子阈值

var

i,j,gray:

integer;

p1,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

//阈值

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

gray:

=floor((max(abs(p1[(i+1)*3+2]-p3[(i-1)*3+2]),abs(p1[(i-1)*3+2]-p3[(i+1)*3+2]))+

max(abs(p1[(i+1)*3+1]-p3[(i-1)*3+1]),abs(p1[(i-1)*3+1]-p3[(i+1)*3+1]))+

max(abs(p1[(i+1)*3+0]-p3[(i-1)*3+0]),abs(p1[(i-1)*3+0]-p3[(i+1)*3+0])))/3);

ifgray>yzthen

begin

p[i*3+2]:

=255;

p[i*3+1]:

=255;

p[i*3+0]:

=255;

endelse

begin

p[i*3+2]:

=0;

p[i*3+1]:

=0;

p[i*3+0]:

=0;

end;

end;//i

end;//j

result:

=tp;

end;

 

Functionsob2():

Tbitmap;//sobel算子全通道

var

i,j:

integer;

p1,p2,p3,p:

PByteArray;

begin

//临时变量初始化

csh2();

//全通道

forj:

=1totp.Height-2do

begin

p1:

=bp.ScanLine[j-1];

p2:

=bp.ScanLine[j];

p3:

=bp.ScanLine[j+1];

p:

=tp.ScanLine[j];

fori:

=1totp.Width-2do

begin

p[i*3+2]:

=bjkz(abs(p1[(i+1)*3+2]+2*p2[(i+1)*3+2]+p3[(i+1)*3+2]

-p1[(i-1)*3+2]-2*p2[(i-1)*3+2]-p3[(i-1)*3+2])+

abs(p3[(i-1)*3+2]+2*p3[i*3+2]+p3[(i+1)*3+2]

-p1[(i-1)*3+2]-2*p1[i*3+2]-p1[(i+1)*3+2]));

p[i*3+1]:

=bjkz(abs(p1[(i+1)*3+1]+2*p2[(i+1)*3+1]+p3[(i+1)*3+1]

-p1[(i-1)*3+1]-2*p2[(i-1)*3+1]-p3[(i-1)*3+1])+

abs(p3[(i-1)*3+1]+2*p3[i*3+1]+p3[(i+1)*3+1]

-p1[(i-1)*3+1]-2*p1[i*3+1]-p1[(i+1)*3+1]));

p[i*3+0]:

=bjkz(abs(p1[(i+1)*3+0]+2*p2[(i+1)*3+0]+p3[(i+1)*3+0]

-p1[

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1