Оконтуривание видеоизображения

Ниже предствлен код оконтуривания видеоизображения. При оконтуривании следует задавать коэффициент оконтуривания, который равен от 7-10 (в зависимости от параметров камерЫ, освещенности, контрастности и размеров изображения).

Алгоритм, показанный ниже, сравнивает соседние пиксели по вертикали и по горизонтали. Если разности интенсивности цвета сравниваемых пикселей больше заданного уровня оконтуривания, то на оконтуренное изображение помещается черный пиксель (цвет 0), в противном случае - белый пиксель (цвет 255).

Пример приведен на языке Delphi:



const
  ImageWidth  = 384;  // ширина изображения. Если умножить на 3 должно быть кратным 4
  ImageHeight = 284;  // высота изображения

type
  // тип данных для черно-белого изображения
  TBWImage    = array[0..ImageHeight-1,0..ImageWidth-1] of Byte;



{---------------------------------------------------}
{   Процедура оконтуривает черно-белое изображение  }
{ начиная со сторки FromY и заканчивая строкой ToY  }
{        Contrast - уровень констрастности          }
{              (рекомендуется 7-10)                 }
{---------------------------------------------------}
procedure BWImageToContoureImage(const BWImage : TBWImage;
                 var ContourizeImage:TBWImage;
                 FromY,ToY:Integer; Contrast : Byte ); assembler;
asm
// EAX-BWImage; EDX-ContourizeImage; ECX-FromY
          PUSH   EDI
          PUSH   ESI

          MOV    ESI,EAX
          MOV    EDI,EDX
          MOV    EAX,ImageWidth
          MUL    ECX
          ADD    ESI,EAX
          ADD    EDI,EAX
          SUB    ECX,ToY
          NEG    ECX
          MOV    DL,Contrast

@@0:      PUSH   ECX
          MOV    ECX,ImageWidth-1

@@1:      LODSB
          MOV    AH,AL
          SUB    AL,[ESI]
          JNS    @@2
          NEG    AL
@@2:      CMP    AL,DL
          JB     @@3
          XOR    AL,AL
          JMP    @@6

@@3:      SUB    AH,[ESI+ImageWidth-1]
          JNS    @@4
          NEG    AH
@@4:      CMP    AH,DL
          JB     @@5
          XOR    AL,AL
          JMP    @@6
@@5:      MOV    AL,255
@@6:      STOSB
          LOOP   @@1
          POP    ECX
          INC    EDI
          INC    ESI
          LOOP   @@0

          POP    ESI
          POP    EDI

end;



procedure TForm1.Timer1Timer(Sender:TObject);
begin
  { получить черно-белое изображение в BWImage }
  

  // Оконтуривание изображения,
  // результат помещается в ту же переменную BWImage
  BWImageToContourizeImage( BWImage, BWImage, 0, ImageHeight, 7);

  // Вывести изображение BWImage2 на PaintBox1 см. захват изображения
  DrawBWImage( PaintBox1.Canvas.Handle, BWImage );
  
  ...
end;




Назад ]
Дизайн: DynSoft 

Рейтинг@Mail.ru
Используются технологии uCoz