⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 livertexturerec.pas

📁 数字图像预出处理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -