=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[