Ver Mensaje Individual
  #1  
Antiguo 10-04-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Histograma. Obtener máximos y mínimos relativos

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;

  {* Estructura de información asociada a valles *}
  TValleyInfo = record
    Count: integer;
    Value: TIntegerDynArray;
  end;

  {* Estructura asociada a Valles *}
  // Un valle está formado por una secuencia de Maximos y Mínimos
  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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita