Cita:
Empezado por seoane
Si no es algo confidencial, puedes colocarlo por aquí para echarle un vistazo.
|
ummm.... no veo que viole algun código del reglamento de trabajos finales de mi universidad (El código que escribí corresponde al sistema para el proyecto de grado). Después de todo es conocimiento adquirido de mis prácticas.. y entre mis fuentes bibliográfica menciono a este maravilloso foro. Además... sólo expongo una breve parte de lo que es... asi que lo pongo:
Código Delphi
[-]function SpaceFiltrate(Image: TPicture; Filter: TTemplate; var MSE: real): integer;
var i, j : integer;
Bmp: TBitmap;
P1, P2, P3, P4: PByte;
aux, Dif: real;
begin
RESULT := NOT_FILTER_SPACE;
Bmp:= TBitmap.Create;
try
Bmp.Width:= Image.Width;
Bmp.Height:= Image.Height;
Bmp.Canvas.Draw(0,0,Image.Graphic);
if not (Image.Graphic is TBitmap) then
Image.Assign(Bmp);
Image.Bitmap.PixelFormat:= pf24bit;
Bmp.PixelFormat:= pf24bit;
MSE := 0;
for j:= 0 to Bmp.Height - 3 do
begin
P1:= Bmp.ScanLine[j];
P2:= Bmp.ScanLine[j+1];
P3:= Bmp.ScanLine[j+2];
P4:= Image.Bitmap.ScanLine[j+1];
for i:= 0 to Bmp.Width - 3 do
begin
Aux := PTFila(P4)[2][BLUE];
PTFila(P4)[2][BLUE] :=
trunc(
(PTFila(P1)[1][BLUE]*Filter[1,1]) +
(PTFila(P1)[2][BLUE]*Filter[1,2]) +
(PTFila(P1)[3][BLUE]*Filter[1,3]) +
(PTFila(P2)[1][BLUE]*Filter[2,1]) +
(PTFila(P2)[2][BLUE]*Filter[2,2]) +
(PTFila(P2)[3][BLUE]*Filter[2,3]) +
(PTFila(P3)[1][BLUE]*Filter[3,1]) +
(PTFila(P3)[2][BLUE]*Filter[3,2]) +
(PTFila(P3)[3][BLUE]*Filter[3,3])
);
Dif := (Aux - PTFila(P4)[2][BLUE]);
Dif := Power(Dif,2);
MSE := MSE + Dif;
PTFila(P4)[2][GREEN] := PTFila(P4)[2][BLUE];
PTFila(P4)[2][RED] := PTFila(P4)[2][BLUE];
inc(P1,Sizeof(TRGBCanal));
inc(P2,Sizeof(TRGBCanal));
inc(P3,Sizeof(TRGBCanal));
inc(P4,Sizeof(TRGBCanal));
end;
end;
finally
Bmp.Free;
end;
MSE := MSE /((Image.Bitmap.Height - 2)*(Image.Bitmap.Width - 2));
Image.Bitmap.PixelFormat := pf8bit;
result := FILTER_SPACE;
end;
Los cambios, están en que yo he definido:
Código Delphi
[-]const
STANDAR_FILTER: TTemplate = ((1/9,1/9,1/9),(1/9,1/9,1/9),(1/9,1/9,1/9));
type
TRGBCanal = array[BLUE..RED] of Byte;
PTRGBCanal = ^TRGBCanal;
TRGBArray = array[1..3] of Byte;
TFila = array[1..3] of TRGBCanal;
PTFila = ^TFila;
TTemplate = array[1..3,1..3] of real;
Espero que pueda ayudar a alguien más... en caso de que llegase a violar algún código... bueno... ya me las arreglo yo. Y si... fuera necesario cerrar el hilo o borrarlo... bueno... veré si me comunico con Emilio para ver que me dice.
Saludos,