Buenas a todos...
Como dice la pregunta... alguien puede indicarme, si es tan amable, ¿como sería el algoritmo para obtener los máximos y mínimos relativos dado un histograma?
Verán... tengo este código, que se que no es muy eficiente:
Código Delphi
[-]PreviusUp := Histogram[MinValue];
for j := (MinValue + 1) to MaxValue do
begin
if Histogram[j] > PreviusUp
then begin
with Valleys.Maximum do
begin
inc(Count);
SetLength(Value, Count);
if (j = (MinValue + 1))
then Value[Count - 1] := MinValue
else Value[Count - 1] := j;
end;
end
else begin
with Valleys.Minimum do
begin
inc(Count);
SetLength(Value, Count);
if (j = (MinValue + 1))
then Value[Count - 1] := MinValue
else Value[Count - 1] := j;
end;
end;
end;
Siendo las estructuras de esta manera:
Código Delphi
[-]THistogram = array[0..MAX_RGB] of integer;
TValleyInfo = record
Count: integer;
Value: TIntegerDynArray;
end;
TValley = record
Count: integer;
Maximum: TValleyInfo;
Minimum: TValleyInfo;
end;
Se que a el código le falta refinar....
Pero de acuerdo a mi lógica (que es muy probable de que esté errado) debería ir copiando en la estructura de maximum y minimum los valores posicionales del histograma que cumple con los máximos y mínimos dependiendo del valor anterior...
Pues, hago recorrer ambas estructuras y no pasa nada... es como si fuera que no encuentra ningún máximo o minimo:
Código Delphi
[-]
ListBox1.Items.Add('--- Valles: ');
smax := 'Maximos: ';
smin := 'Minimos: ';
for j := 0 to Channel[i].Valleys.Maximum.Count - 1 do
begin
valor := Channel[i].Valleys.Maximum.Value[j];
smax := smax + IntToStr(valor) + ',';
end;
for j := 0 to Channel[i].Valleys.Minimum.Count - 1 do
begin
valor := Channel[i].Valleys.Minimum.Value[j];
smin := smin + IntToStr(valor) + ',';
end;
Llevo un tiempo tratando de averiguar donde está la falla... y ya no se por donde ver... aunque el código para obtener los valores no es el correcto... debería ir guardando algo... ¿?
Desde ya muchas gracias por tomarse su tiempo,
Saludos,