«Случай — это псевдоним Бога, когда Он не хочет подписываться своим собственным именем.» А. Франс

CUDA (Проект)/Описание алгоритма работы программы — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
(Формат для чтения слоя)
м (Расчет координат)
Строка 24: Строка 24:
 
== Расчет координат ==
 
== Расчет координат ==
  
 +
{{Hider|Рис. Области перекрытия при сравнении}}
 
{| align=center
 
{| align=center
 
! <html><img src="https://docs.google.com/drawings/d/1W92DU0KQbYLQDlcgS59MUKxijwtx3bpY7UiVcSzEPaM/pub?w=800"></html>
 
! <html><img src="https://docs.google.com/drawings/d/1W92DU0KQbYLQDlcgS59MUKxijwtx3bpY7UiVcSzEPaM/pub?w=800"></html>
Строка 29: Строка 30:
 
! Рисунок 2 ([https://docs.google.com/drawings/d/1W92DU0KQbYLQDlcgS59MUKxijwtx3bpY7UiVcSzEPaM/edit Edit])
 
! Рисунок 2 ([https://docs.google.com/drawings/d/1W92DU0KQbYLQDlcgS59MUKxijwtx3bpY7UiVcSzEPaM/edit Edit])
 
|}
 
|}
 +
{{Hider|end}}
  
 
==== Горизонтальное сравнение ====
 
==== Горизонтальное сравнение ====

Версия 14:01, 19 августа 2013

Проект CUDA

Литература

Содержание

BMP формат

Рисунок 1 (Edit)

PPM формат

  • описание формата PPM
Рисунок 1 (Edit)
  • "image in top to bottom, left to right order."

Расчет координат

Горизонтальное сравнение

Рисунок 3a (Edit)
  • Координаты левого верхнего угла для Tex1 при заданном смещении x и y:
    • Tex1PixelX = width - 1 - xmargin + x;
    • PPM: Tex1PixelY = (y<yoffset) ? 0 : y - yoffset ;
    • BMP: Tex1PixelY = (y<yoffset) ? height - 1 : (height - 1) - (y - yoffset) ;
  • Координаты левого верхнего угла для Tex2 при заданном смещении x и y:
    • Tex2PixelX = 0;
    • PPM: Tex2PixelY = (y<yoffset) ? yoffset - y : 0 ;
    • BMP: Tex2PixelY = (y<yoffset) ? (height - 1) - (yoffset - y) : height - 1 ;
  • Ширина и высота поля перекрытия:
    • xwidth = xmargin - x;
    • yheight = (y<yoffset) ? height - yoffset + y : height - (y - yoffset) ;

pixel = xwidth * yheight ;
 
for (div = 0; div < xwidth ; div++)
{
  Tex1CoorXf = (Tex1PixelX + divx) / (float) width;
  Tex2CoorXf = (Tex2PixelX + divx) / (float) width;
  for (divy = 0; divy < yheight ; divy++)
    {
      Tex1CoorYf = (Tex1PixelY + divy) / (float) {{Кр|height}};
      Tex2CoorYf = (Tex2PixelY + divy) / (float) {{Кр|height}};
      Tex1Pixel = tex2D(tex1, Tex1CoorXf, Tex1CoorYf);
      Tex2Pixel = tex2D(tex2, Tex2CoorXf, Tex2CoorYf);
      ErrorSum += PixelSub(Tex1Pixel, Tex1Pixel);
    }
}
ErrorSum = ErrorSum/pixel;
dM[x,y] = ErrorSum;

Вертикальное сравнение

Рисунок 3b (Edit)
  • Координаты левого верхнего угла для Tex1 при заданном смещении x и y:
    • Tex1PixelX = (x<xoffset) ? 0 : x - xoffset;
    • PPM: Tex1PixelY = (height - 1) - ymargin + y;
    • BMP: Tex1PixelY = ymargin - y;
  • Координаты левого верхнего угла для Tex2 при заданном смещении x и y:
    • Tex2PixelX = (x<xoffset) ? xoffset - x : 0 ;
    • PPM: Tex2PixelY = 0;
    • BMP: Tex2PixelY = height - 1;
  • Ширина и высота поля перекрытия:
    • xwidth = (x<xoffset) ? width - xoffset + x : width - (x - xoffset) ;
    • yheight = ymargin - y;

Преобразование координат между PPM и BMP

  • xPPM = xBMP
  • yPPM = height - 1 - yBMP
  • xBMP = xPPM
  • yBMP = height - 1 - yPPM

Формат для чтения слоя

Текстовый файл в следующем формате:

<Число_строк> <Число_столбцов> <Направление_обхода>
<Имя_картинки_1>
<Имя_картинки_2>
# комментарий
<Имя_картинки_3>
. . .
<Имя_картинки_N>

Направление обхода кодируется следующим образом:

  • 0 — слева направо, сверху вниз;
  • 1 — слева направо, снизу вверх;
  • 2 — сверху вниз, слева направо;
  • 3 — снизу вверх, слева направо.

Пример файла

3 3 0
M1R01C4_.bmp
M1R01C5_.bmp
M1R01C6_.bmp
M1R02C4_.bmp
M1R02C5_.bmp
M1R02C6_.bmp
M1R03C4_.bmp
M1R03C5_.bmp
M1R03C6_.bmp

NEW