Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить алгоритм 
:(
    Опции темы
dimchik19
  Дата 8.5.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.5.2009

Репутация: нет
Всего: нет



Помогите составить  алгоритм,  как  мне определить объект на изображение которое делится по полам по горизонтали,  при помощи полу колец   и радиусов по пиксельно.   За художество прошу прощения.

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  111.jpg 106,49 Kb
PM MAIL   Вверх
Pavia
Дата 8.5.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Ничего непонял что требу ется то? Определить наличие или отсутствия объекта? Тогда проверяй наличие полуколец и радиусов.
PM MAIL   Вверх
dimchik19
Дата 8.5.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.5.2009

Репутация: нет
Всего: нет



Цитата(Pavia @ 8.5.2009,  16:08)
Ничего непонял что требу ется то? Определить наличие или отсутствия объекта? Тогда проверяй наличие полуколец и радиусов.

Требуется к примеру загружаю BMP изображение на нем находится какой либо объект допустим самалёт нужно подсчитать сумму пикселей полуколец и радиусов в нутри самалета т .е объекта и сахронить его в базе. изображение чёрно белое.
PM MAIL   Вверх
Pavia
Дата 8.5.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Код

//Выбираем дескритизацию.
//Пусть NR=50 определяет число полудуг.
//Пусть NFov=180 определяет число радиусов.

SetLength(Arcs,NR);  //Задаем размер массива дуг
h:=hypot(Width/2,Height/2);
for i:=0 to Width/2 do
 for j:=0 to Height div 2 -1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then  // Проверяем пиксель черный или нет
   begin
   Inc(Arcs[Round(hypot(i-Width/2,J-Height/2)/h*NR)],1); // Вычисляем радиус накоторой находить полу дуга и увеличиваем счетчик соответсвующего массива на 1
   end;
   
SetLength(Radius,NFov); //Задаем размер массива радиусов
h:=-Pi;
for i:=0 to Width/2 do
 for j:=Height div 2 to Height-1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then 
   begin
   Inc(Radius[Abs(Round(ArcTan2(j-Height/2,i-Width/2)/h*NFov))],1);  // Вычисляем угол накоторой повернут радиус и увеличиваем счетчик соответсвующего массива на 1 ABS () Для перестраховки. 
   end;



Можно и точнее. Перебираешь не точки и радиусы и углы и проверяешь цвет точки в пикселе.

Добавлено через 4 минуты и 20 секунд
Код

//Выбираем дескритизацию.
//Пусть NR=50 определяет число полудуг.
//Пусть NFov=180 определяет число радиусов.

SetLength(Arcs,NR);  //Задаем размер массива дуг
h:=hypot(Width/2,Height/2);
for i:=0 to Width/2 do
 for j:=0 to Height div 2 -1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then  // Проверяем пиксель черный или нет
   begin
   Inc(Arcs[Round(hypot(i-Width/2,J-Height/2)/h*NR)],1); // Вычисляем радиус накоторой находить полу дуга и увеличиваем счетчик соответсвующего массива на 1
   end;
   
SetLength(Radius,NFov); //Задаем размер массива радиусов
h:=-Pi;
for i:=0 to Width/2 do
 for j:=Height div 2 to Height-1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then 
   begin
   Inc(Radius[Abs(Round(ArcTan2(j-Height/2,i-Width/2)/h*NFov))],1);  // Вычисляем угол накоторой повернут радиус и увеличиваем счетчик соответсвующего массива на 1 ABS () Для перестраховки. 
   end;



Можно и точнее. Перебираешь не точки и радиусы и углы и проверяешь цвет точки в пикселе.
PM MAIL   Вверх
dimchik19
Дата 8.5.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.5.2009

Репутация: нет
Всего: нет



Цитата(Pavia @ 8.5.2009,  19:24)
Код

//Выбираем дескритизацию.
//Пусть NR=50 определяет число полудуг.
//Пусть NFov=180 определяет число радиусов.

SetLength(Arcs,NR);  //Задаем размер массива дуг
h:=hypot(Width/2,Height/2);
for i:=0 to Width/2 do
 for j:=0 to Height div 2 -1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then  // Проверяем пиксель черный или нет
   begin
   Inc(Arcs[Round(hypot(i-Width/2,J-Height/2)/h*NR)],1); // Вычисляем радиус накоторой находить полу дуга и увеличиваем счетчик соответсвующего массива на 1
   end;
   
SetLength(Radius,NFov); //Задаем размер массива радиусов
h:=-Pi;
for i:=0 to Width/2 do
 for j:=Height div 2 to Height-1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then 
   begin
   Inc(Radius[Abs(Round(ArcTan2(j-Height/2,i-Width/2)/h*NFov))],1);  // Вычисляем угол накоторой повернут радиус и увеличиваем счетчик соответсвующего массива на 1 ABS () Для перестраховки. 
   end;



Можно и точнее. Перебираешь не точки и радиусы и углы и проверяешь цвет точки в пикселе.

Добавлено @ 19:28
Код

//Выбираем дескритизацию.
//Пусть NR=50 определяет число полудуг.
//Пусть NFov=180 определяет число радиусов.

SetLength(Arcs,NR);  //Задаем размер массива дуг
h:=hypot(Width/2,Height/2);
for i:=0 to Width/2 do
 for j:=0 to Height div 2 -1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then  // Проверяем пиксель черный или нет
   begin
   Inc(Arcs[Round(hypot(i-Width/2,J-Height/2)/h*NR)],1); // Вычисляем радиус накоторой находить полу дуга и увеличиваем счетчик соответсвующего массива на 1
   end;
   
SetLength(Radius,NFov); //Задаем размер массива радиусов
h:=-Pi;
for i:=0 to Width/2 do
 for j:=Height div 2 to Height-1 do
  if bp.Canvas.Pixel[i,j]=ClBlack then 
   begin
   Inc(Radius[Abs(Round(ArcTan2(j-Height/2,i-Width/2)/h*NFov))],1);  // Вычисляем угол накоторой повернут радиус и увеличиваем счетчик соответсвующего массива на 1 ABS () Для перестраховки. 
   end;



Можно и точнее. Перебираешь не точки и радиусы и углы и проверяешь цвет точки в пикселе.

Спасибо а можно это както перевести на С++ Builder или visual
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0416 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.