Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2013, 15:09   #1
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
Радость Скелитолизация изображения используя алгоритм Зонга-Суня

Ни как не могу привести к работоспособному виду (на выходе получается чёрное изображение)

Код Зонга-Суня который нашел в интернете и картинку на которой тренируюсь прикрепил ниже

Немного изменил под себя код

Код:
function t1a(i, j: integer; var a: array of integer; var b: integer): integer;
var
  n, m: integer;
begin
  { Return the number of 01 patterns in the sequence of pixels
    P2 p3 p4 p5 p6 p7 p8 p9. }

  // int n,m;

  for n := 0 to 8 - 1 do
    a[n] := 0;

  if (i - 1 >= 0) then
  begin
    a[0] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i - 1, j]);
    if (j + 1 < Form1.Image1.Picture.Bitmap.Height) then
      a[1] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i - 1, j + 1]);
    if (j - 1 >= 0) then
      a[7] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i - 1, j - 1]);
  end;

  if (i + 1 < Form1.Image1.Picture.Bitmap.Width) then
  begin
    a[4] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i + 1, j]);
    if (j + 1 < Form1.Image1.Picture.Bitmap.Height) then
      a[3] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i + 1, j + 1]);
    if (j - 1 >= 0) then
      a[5] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i + 1, j - 1]);
  end;

  if (j + 1 < Form1.Image1.Picture.Bitmap.Height) then
    a[2] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i, j + 1]);
  if (j - 1 >= 0) then
    a[6] := integer(Form1.img1.Picture.Bitmap.Canvas.Pixels[i, j - 1]);

  m := 0;
  b := 0;
  for n := 0 to 6 do
  begin
    if ((a[n] = 0) and (a[n + 1] = 1)) then
      m := m + 1;
    b := b + a[n];
  end;

  if ((a[7] = 0) and (a[0] = 1)) then
    m := m + 1;
  b := b + a[7];
  result := m;
end;

procedure subtr;
var
  i, j: integer;

begin

  for i := 0 to Form1.Image1.Picture.Bitmap.Width do
    for j := 0 to Form1.Image1.Picture.Bitmap.Height do
      if Form1.img2.Picture.Bitmap.Canvas.Pixels[i, j] = clWhite then
      begin
        Form1.img1.Picture.Bitmap.Canvas.Pixels[i, j] := 0;
        pixeldeleted := true;
      end;
end;

Procedure SkeletizeZS2;
var
  i, j, n, m, k, cont, br, ar, p1, p2: integer;
  a: array [0 .. 8] of integer;
begin
  pixeldeleted := false;
  { Sub-iteration 1: }
  for i := 0 to Form1.Image1.Picture.Bitmap.Width do
    for j := 0 to Form1.Image1.Picture.Bitmap.Height do
    begin
      { Scan the entire image }
      if (Form1.img1.Picture.Bitmap.Canvas.Pixels[i, j] = 0) then
      begin
        Form1.img2.Picture.Bitmap.Canvas.Pixels[i, j] := 0;
        continue;
      end;
      ar := t1a(i, j, a, br); { Function A }
      p1 := a[0] * a[2] * a[4];
      p2 := a[2] * a[4] * a[6];
      if ((ar = 1) and ((br >= 2) and (br <= 6)) and (p1 = 0) and (p2 = 0)) then
      begin
        Form1.img2.Picture.Bitmap.Canvas.Pixels[i, j] := clWhite;
      end
      else
        Form1.img2.Picture.Bitmap.Canvas.Pixels[i, j] := 0;
    end;
  subtr;

  { Sub iteration 2: }
  for i := 0 to Form1.Image1.Picture.Bitmap.Width do
    for j := 0 to Form1.Image1.Picture.Bitmap.Height do
    begin { Scan the entire image }
      if (Form1.img1.Picture.Bitmap.Canvas.Pixels[i, j] = 0) then
      begin
        Form1.img2.Picture.Bitmap.Canvas.Pixels[i, j] := 0;
        continue;
      end;
      ar := t1a(i, j, a, br); { Function A }
      p1 := a[0] * a[2] * a[6];
      p2 := a[0] * a[4] * a[6];
      if ((ar = 1) and ((br >= 2) and (br <= 6)) and (p1 = 0) and (p2 = 0)) then
      begin
        Form1.img2.Picture.Bitmap.Canvas.Pixels[i, j] := clWhite;

      end
      else
        Form1.img2.Picture.Bitmap.Canvas.Pixels[i, j] := 0;
    end;
  subtr;
end;
Изображения
Тип файла: bmp image34.bmp (2.3 Кб, 181 просмотров)
Вложения
Тип файла: zip ZS.zip (888 байт, 45 просмотров)

Последний раз редактировалось Terikon; 19.01.2013 в 15:11.
Terikon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм точного поворота растрового изображения Prosolver Gamedev - cоздание игр: Unity, OpenGL, DirectX 22 06.07.2016 18:47
Алгоритм масштабирования изображения(х1, х2, х3...) DENIS_POLOTSK C# (си шарп) 6 28.05.2012 21:35
Алгоритм скелетизации фигур Зонга-Суня (delphi) ksv1991 Помощь студентам 0 18.08.2011 19:16
Алгоритм упаковывания изображения MIKI Общие вопросы C/C++ 4 04.06.2008 20:09
Алгоритм упаковывания изображения MIKI Фриланс 7 06.04.2008 20:03