BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/ImageAnalysis/Compare/umain.pas

119 lines
3.6 KiB
Plaintext

unit umain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ieview, ImageEnView, hyiedefs, hyieutils, iexBitmaps, iesettings,
iexLayers, iexRulers;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
ImageEnView1: TImageEnView;
ImageEnView2: TImageEnView;
Button2: TButton;
Button3: TButton;
GroupBox1: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Button4: TButton;
GroupBox2: TGroupBox;
Label15: TLabel;
Label16: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
ImageEnProc;
{$R *.DFM}
{$R WindowsTheme.res}
// compare (using ComputeImageEquality)
procedure TForm1.Button1Click(Sender: TObject);
var
psnr_min, psnr_max: double;
mse_min, mse_max: double;
rmse_min, rmse_max: double;
pae_min, pae_max: double;
mae_min, mae_max: double;
equal: boolean;
ww, hh: integer;
begin
// adjust sizes (make ImageEnView1=ImageEnView2)
ww := ImageEnView1.IEBitmap.Width;
hh := ImageEnView1.IEBitmap.Height;
if (ww <> ImageEnView2.IEBitmap.Width) or (hh <> ImageEnView2.IEBitmap.Height) then
ImageEnView2.Proc.Resample(ww, hh, rfNone);
//
equal := ImageEnView1.Proc.ComputeImageEquality(ImageEnView2.IEBitmap, psnr_min, psnr_max, mse_min, mse_max, rmse_min, rmse_max, pae_min, pae_max, mae_min, mae_max);
label4.caption := IEFloatToFormatString(psnr_min, 2, True) + ' (min) , ' + IEFloatToFormatString(psnr_max, 2, True) + ' (max)';
label6.caption := IEFloatToFormatString(mse_min, 2, True) + ' (min) , ' + IEFloatToFormatString(mse_max, 2, True) + ' (max)';
label8.caption := IEFloatToFormatString(rmse_min, 2, True) + ' (min) , ' + IEFloatToFormatString(rmse_max, 2, True) + ' (max)';
label10.caption := IEFloatToFormatString(pae_min, 2, True) + ' (min) , ' + IEFloatToFormatString(pae_max, 2, True) + ' (max)';
label12.caption := IEFloatToFormatString(mae_min, 2, True) + ' (min) , ' + IEFloatToFormatString(mae_max, 2, True) + ' (max)';
if equal then
label14.caption := 'True'
else
label14.caption := 'False';
end;
// compare using CompareWith
procedure TForm1.Button4Click(Sender: TObject);
var
ww, hh: integer;
v: double;
begin
// adjust sizes (make ImageEnView1=ImageEnView2)
ww := ImageEnView1.IEBitmap.Width;
hh := ImageEnView1.IEBitmap.Height;
if (ww <> ImageEnView2.IEBitmap.Width) or (hh <> ImageEnView2.IEBitmap.Height) then
ImageEnView2.Proc.Resample(ww, hh, rfNone);
//
v := ImageEnView1.Proc.CompareWith(ImageEnView2.IEBitmap, nil);
label16.Caption := IEFloatToFormatString(v * 100, 2, True) + ' %';
end;
// Open A B
procedure TForm1.Button2Click(Sender: TObject);
begin
with ImageEnView1.IO do
LoadFromFile(ExecuteOpenDialog('', '', false, 1, ''));
Label1.caption := 'Image A (' + ImageEnView1.IEBitmap.getHash() + ')';
end;
// Open B
procedure TForm1.Button3Click(Sender: TObject);
begin
with ImageEnView2.IO do
LoadFromFile(ExecuteOpenDialog('', '', false, 1, ''));
Label2.caption := 'Image B (' + ImageEnView2.IEBitmap.getHash() + ')';
end;
end.