Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 596

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста решить следующую задачу. Необходимо программно определить координаты крайних точек объекта на изображении (цвет - отличный от белого фона) относительно начала координат, заданной
x - координатой левой нижней точкой, y - верхней правой
(по аналогии нач. координат - правый верхний угол, правый нижний угол, левый верхний угол, левый нижний угол)
Пример прикреплён. Заранее благодарен!

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Free Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Free (статус: Посетитель)
Вопрос отправлен: 21 сентября 2010, 16:15
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 22 сентября 2010, 16:13; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 21 сентября 2010, 16:47 [#1]:

У Вас на листике готовый алгоритм:)
Галочка "подтверждения прочтения" - вселенское зло.
Free

Free (статус: Посетитель), 21 сентября 2010, 16:55 [#2]:

Я уже долгое время пытаюсь сделать реализацию, однако алгоритм работает либо недостаточно быстро, либо пропускает точки. Прошу помочь с реализацией.
Егор

Егор (статус: 10-ый класс), 21 сентября 2010, 17:12 [#3]:

Цитата (Free):

Я уже долгое время пытаюсь сделать реализацию

где код? посмотрим, скажем, где ошибки
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Free

Free (статус: Посетитель), 21 сентября 2010, 17:17 [#4]:

Вот фрагмент старой версии кода.
Ошибок здесь очень много, вдобавок он абсолютно нерабочий, поэтому-то и легче заново его написать...

var
Y,X,
_x,_y,_y_x,
Count: Integer;
FirstX,FirstY: Boolean;
PointX,PointY: array [1..10000] of integer;
begin
Image1.Canvas.Brush.Color := clBlack;
Image1.Canvas.Rectangle(0,0,10,12);
Count:=0;
FirstX := true;
FirstY := true;
_x:=0;
_y:=0;
_y_x:=0;
for Y := 0 to Image1.Height do begin
for X := 0 to Image1.Width do
if Image1.Canvas.Pixels[X,Y] <> clWhite then begin
if FirstX = true then begin
if FirstY = true then begin ///Здесь - то и начинаются ошибки :)
FirstX := false; // Только если по x и y - первая
FirstY := false;
inc(Count);
PointX[Count]:=X+1; // Координаты первой по X и Y
PointY[Count]:=Y+1;
end else
begin
FirstX := false;
_y:=y; // Координаты возможной последней по Y
_y_x:=x;
end;
end else _x:=x; // Координаты возможной последней по X
end; // Координата по x
if _x <> 0 then
begin
inc(Count);
PointX[Count]:=_x+1; // Последняя координата по X
PointY[Count]:=Y+1;
FirstX := true;
_x:=0;
end;
end;
if _y <> 0 then
PointX[Count]:=_y_x+1; // Последняя координата по Y
PointY[Count]:=_Y+1;

end;
Вадим К

Вадим К (статус: Академик), 21 сентября 2010, 17:22 [#5]:

меня строка
if FirstX = true then begin
уже наводит на грусть. тут две ошибки по дизайну.

в целом, алгоритм то в общем простой. представьте себе вертикальную линию, которая передвигается слева на право. пока в ней все точки белые, идем дальше. Как только нашли хотя бы одну черную - стоп. теперь ещё три линии - справа, сверху и снизу.
В результате получим прямоугольник, где находиться заданная фигура.
Галочка "подтверждения прочтения" - вселенское зло.
Free

Free (статус: Посетитель), 21 сентября 2010, 17:46 [#6]:

Дело в том, что нужны конкретные координаты точек фигуры, учитывая то, что по оси x,y их может быть несколько, а начало координат - так же переменная величина. Пожалуйста, приведите программную реализацию!!!
Вадим К

Вадим К (статус: Академик), 21 сентября 2010, 17:51 [#7]:

тогда наверно нужно формулировать вопрос так "координаты прямых, которые составляют фигуру"?
Галочка "подтверждения прочтения" - вселенское зло.
Free

Free (статус: Посетитель), 21 сентября 2010, 17:54 [#8]:

Ну, в таком случае - координаты начала\конца прямых, которые составляют фигуру.
Вадим К

Вадим К (статус: Академик), 22 сентября 2010, 10:42 [#9]:

Это уже называется векторизацией. Вот рекомендую прочитать к примеру этот форум http://forum.sources.ru/index.php?showtopic=227719 , а там может и мысли появятся.
Галочка "подтверждения прочтения" - вселенское зло.
Вадим К

Вадим К (статус: Академик), 22 сентября 2010, 10:44 [#10]:

и тут ещё http://www.philippovich.ru/Library/Books/ITS/wwwbook/ist4b/its4/kryilov.htm
Галочка "подтверждения прочтения" - вселенское зло.
Free

Free (статус: Посетитель), 22 сентября 2010, 16:13 [#11]:

Я то и искал реализации этих алгоритмов, но не нашёл...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:51
Выполнено за 0.03 сек.