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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2012, 12:27   #1
casio23
Форумчанин
 
Аватар для casio23
 
Регистрация: 29.12.2010
Сообщений: 186
По умолчанию матрица

помогите решить задачу,вот собственно задача:
Цитата:
имеется изображение, на котором есть искомые объекты. Оно представлено двумерной матрицей пикселей размером w*h, в которой каждый пиксель имеет значение:
— от 0 до 255, если это черно-белое изображение;
— от 0 до 255(3), если это цветное изображение (компоненты R, G, B).
в результате своей работы, алгоритм должен определить искомые объекты и пометить их – поиск осуществляется в активной области изображения прямоугольными признаками, с помощью которых и описывается найденное искомые объекты:
rectangle(i) = {x,y,w,h,a},
где x, y – координаты центра i-го прямоугольника, w – ширина, h – высота, a – угол наклона прямоугольника к вертикальной оси изображения.
вот собственно сам код, но почему то выдает ошибку в ф-и GetRect
Код:
uses Graphics,Types;
type
TRGB=record
r,g,b:byte;
end;
trgba=array[0..1024]of trgb;
prgba=^trgba;
//Класс интегрального изображения
TIntegralImage=class(TObject)
private
matrix:array of array of integer;
function Awidth:integer;
function Aheight:integer;
public
procedure Assign(bmp:TBitmap);
function GetRect(r:Trect):integer;
property width:integer read AWidth;
property Height:integer read AHeight;
end;

implementation

{ TIntegralImage }

function TIntegralImage.Aheight: integer;
begin
result:=length(self.matrix[0]);
end;

procedure TIntegralImage.Assign(bmp: TBitmap);
var
i,j,w,h,s:integer;
l:prgba;
begin
//Создаем матрицу соразмерную изображению
bmp.PixelFormat:=pf24bit;
w:=bmp.Width;
h:=bmp.Height;
setlength(matrix,w);
for i:=0 to w-1 do
setlength(matrix[i],h);
//Вычисляем интегральную матрицу
for j:=0 to h-1 do
begin
l:=bmp.ScanLine[j];
for i:=0 to w-1 do
begin
s:=l[i].r;
if i>0 then s:=s+matrix[i-1,j];
if j>0 then s:=s+matrix[i,j-1];
if (i>0)and(j>0)then s:=s-matrix[i-1,j-1];
matrix[i,j]:=s;
end;
end;
end;

function TIntegralImage.Awidth: integer;
begin
result:=length(self.matrix);
end;

function TIntegralImage.GetRect(r: Trect): integer;
begin
result:=matrix[r.Right,r.Bottom];
if r.top>0 then result:=result-matrix[r.Right,r.top-1];
if r.left>0 then result:=result-matrix[r.Left-1,r.bottom];
if (r.left>0)and(r.Top>0)then result:=result+matrix[r.Left-1,r.top-1];
end;
casio23 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
матрица Yalovick Паскаль, Turbo Pascal, PascalABC.NET 6 29.12.2010 14:48
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11
матрица Babur4iK Помощь студентам 1 11.11.2009 17:53