📄 livertexturerec.pas
字号:
FCorrelationRD:=FCorrelationRD/(RollTimeH*RollTimeW);
FCorrelationRD:=strtofloat(format('%.5f',[FCorrelationRD]));
FInertiaQuaRD:=FInertiaQuaRD/(RollTimeH*RollTimeW);
FInertiaQuaRD:=strtofloat(format('%.5f',[FInertiaQuaRD]));
FLocalCalmRD:=FLocalCalmRD/(RollTimeH*RollTimeW);
FLocalCalmRD:=strtofloat(format('%.5f',[FLocalCalmRD]));
//135度方向纹理特征
FEnergyLD:=FEnergyLD /(RollTimeH*RollTimeW);
FEnergyLD:=strtofloat(format('%.5f',[FEnergyLD]));
FEntropyLD:=FEntropyLD/(RollTimeH*RollTimeW);
FEntropyLD:=strtofloat(format('%.5f',[FEntropyLD]));
FCorrelationLD:=FCorrelationLD/(RollTimeH*RollTimeW);
FCorrelationLD:=strtofloat(format('%.5f',[FCorrelationLD]));
FInertiaQuaLD:=FInertiaQuaLD/(RollTimeH*RollTimeW);
FInertiaQuaLD:=strtofloat(format('%.5f',[FInertiaQuaLD]));
FLocalCalmLD:=FLocalCalmLD/(RollTimeH*RollTimeW);
FLocalCalmLD:=strtofloat(format('%.5f',[FLocalCalmLD]));
te:=gettickcount;
TimeEdit.Text:=floattostr((te-ts)*55/1000)+'s';
setlength(ImageArray,0,0);
setlength(arLocalImage,0,0);
EnergyEdit.Text:=floattostr(FeatureEnergy);
EntropyEdit.Text:=floattostr(FeatureEntropy);
CorrelationEdit.Text:=floattostr(FeatureCorrelation);
InertiaQuadratureEdit.Text:=floattostr(FeatureInertiaQuadrature);
LocalCalmEdit.Text:=floattostr(FeatureLocalCalm);
//90度方向纹理特征
EnergyVEdit.Text:=floattostr(FEnergyV);
EntropyVEdit.Text:=floattostr(FEntropyV);
CorrelationVEdit.Text:=floattostr(FCorrelationV);
InertiaQuadratureVEdit.Text:=floattostr(FInertiaQuaV);
LocalCalmVEdit.Text:=floattostr(FLocalCalmV);
//45度方向纹理特征
EnergyRDEdit.Text:=floattostr(FEnergyRD);
EntropyRDEdit.Text:=floattostr(FEntropyRD);
CorrelationRDEdit.Text:=floattostr(FCorrelationRD);
InertiaQuadratureRDEdit.Text:=floattostr(FInertiaQuaRD);
LocalCalmRDEdit.Text:=floattostr(FLocalCalmRD);
//135度方向纹理特征
EnergyLDEdit.Text:=floattostr(FEnergyLD);
EntropyLDEdit.Text:=floattostr(FEntropyLD);
CorrelationLDEdit.Text:=floattostr(FCorrelationLD);
InertiaQuadratureLDEdit.Text:=floattostr(FInertiaQuaLD);
LocalCalmLDEdit.Text:=floattostr(FLocalCalmLD);
if RecognizeStudyvariable= false then
begin
LiverKindIDEdit.Text:=inttostr(strtoint(LiverKindIDEdit.Text)+1);
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][0]:=FeatureEnergy;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][1]:=FeatureEntropy;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][2]:=FeatureCorrelation;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][3]:=FeatureInertiaQuadrature;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][4]:=FeatureLocalCalm;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][0]:=FEnergyV;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][1]:=FEntropyV;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][2]:=FCorrelationV;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][3]:=FInertiaQuaV;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][4]:=FLocalCalmV;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][0]:=FEnergyRD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][1]:=FEntropyRD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][2]:=FCorrelationRD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][3]:=FInertiaQuaRD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][4]:=FLocalCalmRD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][0]:=FEnergyLD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][1]:=FEntropyLD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][2]:=FCorrelationLD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][3]:=FInertiaQuaLD;
pattern[strtoint(LiverKindEdit.Text)].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][4]:=FLocalCalmLD;
end
else
if (RecognizeStudyvariable=true) and (BP_LMSRecognize=false) then
begin
GrayCurrenceMatrix.FeatureCompareResult(); //用最小距离分类方法
end;
if (BP_LMSRecognize=true) and (RecognizeStudyvariable=true) then
GrayCurrenceMatrix.LMSE(); //用LMSE分类方法
end;
procedure TLiverTextureRecForm.LiverKindEditChange(Sender: TObject);
begin
LiverKindIDEdit.Text:='0';
//LiverKindIDEdit.Text:=inttostr(strtoint(LiverKindIDEdit.Text)+1);
end;
procedure TLiverTextureRecForm.SaveAllPatternButtonClick(Sender: TObject);
var //记录每类肝脏的各个模板
n,i,j,k,LiverType:integer;
SepChar:String;
PatternFile:TextFile;
pathstring:string;
begin
PathString:=ExtractFilePath(Application.ExeName)+'Feature\Pattern.txt';
Assignfile(PatternFile,PathString);
ReWrite(PatternFile);//写模板文件
SepChar:=' ';
for LiverType := 0 to 2 do //记录肝脏‘0’到‘2’的各模板数据
if Pattern[LiverType].Num=0 then
begin
Writeln(PatternFile,IntToStr(LiverType));//记录肝脏类别
Writeln(PatternFile,IntToStr(0));//记录该肝脏类别模板的个数
end
else
if Pattern[LiverType].Num<>0 then
begin
Writeln(PatternFile,IntToStr(LiverType));//记录肝脏类别
Writeln(PatternFile,IntToStr(pattern[LiverType].Num));//记录该肝脏类别模板的个数
for k:=1 to Pattern[LiverType].Num do
begin //记录每个模板的具体特征值
Writeln(PatternFile,FloatToStr(pattern[LiverType].FeatrueValue[k][0][0]),
SepChar,FloatToStr(Pattern[LiverType].FeatrueValue[k][0][1]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][0][2]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][0][3]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][0][4]),SepChar);
Writeln(PatternFile,FloatToStr(pattern[LiverType].FeatrueValue[k][1][0]),
SepChar,FloatToStr(Pattern[LiverType].FeatrueValue[k][1][1]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][1][2]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][1][3]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][1][4]),SepChar);
Writeln(PatternFile,FloatToStr(pattern[LiverType].FeatrueValue[k][2][0]),
SepChar,FloatToStr(Pattern[LiverType].FeatrueValue[k][2][1]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][2][2]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][1][3]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][1][4]),SepChar);
Writeln(PatternFile,FloatToStr(pattern[LiverType].FeatrueValue[k][3][0]),
SepChar,FloatToStr(Pattern[LiverType].FeatrueValue[k][3][1]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][3][2]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][3][3]),SepChar
,FloatToStr(Pattern[LiverType].FeatrueValue[k][3][4]),SepChar);
end;
end;
CloseFile(PatternFile);//关闭模板文件
end;
procedure TLiverTextureRecForm.SaveCurrentlyPatternButtonClick(Sender: TObject);
var
i:integer;
begin
for i:= 0 to 2 do
if strtoint(LiverKindEdit.Text)= i then
begin
pattern[i].num:=strtoint(LiverKindIDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][0]:=strtofloat(EnergyEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][1]:=strtofloat(EntropyEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][2]:=strtofloat(CorrelationEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][3]:=strtofloat(InertiaQuadratureEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][0][4]:=strtofloat(LocalCalmEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][0]:=strtofloat(EnergyVEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][1]:=strtofloat(EntropyVEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][2]:=strtofloat(CorrelationVEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][3]:=strtofloat(InertiaQuadratureVEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][1][4]:=strtofloat(LocalCalmVEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][0]:=strtofloat(EnergyRDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][1]:=strtofloat(EntropyRDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][2]:=strtofloat(CorrelationRDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][3]:=strtofloat(InertiaQuadratureRDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][2][4]:=strtofloat(LocalCalmRDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][0]:=strtofloat(EnergyLDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][1]:=strtofloat(EntropyLDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][2]:=strtofloat(CorrelationLDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][3]:=strtofloat(InertiaQuadratureLDEdit.Text);
pattern[i].FeatrueValue[strtoint(LiverKindIDEdit.Text)][3][4]:=strtofloat(LocalCalmLDEdit.Text);
end;
end;
procedure TLiverTextureRecForm.SaveNowToolButtonClick(Sender: TObject);
begin
SaveCurrentlyPatternButton.Click;
end;
procedure TLiverTextureRecForm.SaveAllToolButtonClick(Sender: TObject);
begin
SaveAllPatternButton.Click;
end;
procedure TLiverTextureRecForm.SdudyToolButtonClick(Sender: TObject);
begin
RecognizeToolButton.Down:=false;
RecognizeStudyvariable:= false;
LMSEButton.Down:=false;
RecLiverKindEdit.Text:='0';
end;
procedure TLiverTextureRecForm.PatternOrderButtonClick(Sender: TObject);
begin
LiverKindIDEdit.Text:=inttostr(pattern[strtoint(LiverKindEdit.Text)].num);
end;
function TLiverTextureRecForm.Get_Most_LRTB: TRect;
var //得到图片上的最左、最右、最上、最下的点
i, j: integer;
rect_s, rect_d: TRect;
SaveImage: Tbitmap;
label FindMostRight, FindMostTop,FindMostBottom, FindInMiddle;
begin
//FindMostLeft: 获得最左边的点
for i := 1 to TempPartImage.Width - 1 do
for j := 1 to TempPartImage.Height - 1 do
if TempPartImage.Canvas.Pixels[i, j] <> clWhite then
begin
Result.Left := i;
goto FindMostRight;
end;
FindMostRight: //获得最右边的点
for i := TempPartImage.Width - 1 downto 1 do
for j := 1 to TempPartImage.Height - 1 do
if TempPartImage.Canvas.Pixels[i, j] <> clWhite then
begin
Result.Right := i;goto FindMostTop;
end;
FindMostTop: // 获得最上面的点
for j := 1 to TempPartImage.Height - 1 do
for i := 1 to TempPartImage.Width - 1 do
if TempPartImage.Canvas.Pixels[i, j] <> clWhite then
begin
Result.Top := j;goto FindMostBottom;
end;
FindMostBottom: //获得最下面的点
for j := TempPartImage.Height - 1 downto 1 do
for i := 1 to TempPartImage.Width - 1 do
if TempPartImage.Canvas.Pixels[i, j] <> clWhite then
begin
Result.Bottom := j; goto FindInMiddle;
end;
FindInMiddle:
i := Result.Right - Result.Left;//得到区域宽度
j := Result.Bottom - Result.Top;//得到区域高度
i := i mod 16; i := i div 8;
if i > 0 then //将边缘对称于矩形的左右部分
begin
Dec(Result.Left, i); Inc(Result.Right, i);
end;
j := j mod 16; j := j div 8;
if j > 0 then //将边缘对称于矩形的上下部分
begin
Dec(Result.Top, i);Inc(Result.Bottom, j);
end;
end;
procedure TLiverTextureRecForm.GetLiverPartImage();
var
rect_s, rect_d: TRect;
SaveImage: Tbitmap;
begin
SaveImage := Tbitmap.Create;
// 取得数字图片的位置 rest_d;
Rect_s := Get_Most_LRTB;
Rect_d.Top := 0;
Rect_d.Left := 0;
Rect_d.Right := rect_s.Right - rect_s.Left;
Rect_d.Bottom:= rect_s.Bottom - rect_s.Top;
SaveImage.Width := rect_d.Right;
SaveImage.Height:= rect_d.Bottom;
SaveImage.Canvas.CopyRect(rect_d, TempPartImage.Canvas, rect_s);
// Clipboard.Assign(SaveImage.Picture);
SaveImage.SaveToFile('./ade1.bmp');
end;
procedure TLiverTextureRecForm.R2Click(Sender: TObject);
begin
RecognizeToolButton.Click;
// mdichild.Edit1.Text:='0';
end;
procedure TLiverTextureRecForm.S1Click(Sender: TObject);
begin
SdudyToolButton.Click;
end;
procedure TLiverTextureRecForm.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;
end;
procedure TLiverTextureRecForm.LMSEButtonClick(Sender: TObject);
begin
RecognizeStudyvariable:=true;
BP_LMSRecognize:=true;
SdudyToolButton.Down:=false;
RecognizeToolButton.Down:=false;
//RecognizeStudyvariable:= true;
end;
procedure TLiverTextureRecForm.N5Click(Sender: TObject);
begin
RecognizeToolButton.Click;
end;
procedure TLiverTextureRecForm.LMSE1Click(Sender: TObject);
begin
LMSEButton.Click;
end;
procedure TLiverTextureRecForm.Button1Click(Sender: TObject);
begin
GrayCurrenceMatrix.NormalizeTexture();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -