Модераторы: bsa
  

Поиск:

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


Бывалый
*


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

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



Вот что должно произойти:
Запускается exe, загружаем image,применяем фильтр, выводим отфильтрованое изображение,выходим из проги.
Есть код фильтра, но я не могу в нём разобраться.

Interface:

Код

image median_filter(image si, int r);


Support defines and functions:

Код

#include "imglib.h"
 
#define XGET(X) (((X)<0)?0:(((X)>=m->width)?m->width-1:(X)))
#define YGET(Y) (((Y)<0)?0:(((Y)>=m->height)?m->height-1:(Y)))
 
struct _pm
{
   pixel p;
   luminance lum;
};
 
static int _cmp(const void *a, const void *b)
{
   struct _pm *ap, *bp;
   ap = (struct _pm *)a;
   bp = (struct _pm *)b;
   if ( ap->lum > bp->lum ) return 1;
   if ( ap->lum < bp->lum ) return -1;
   return 0;
}
 
 
static void _get_median(image m,
                  unsigned int x, unsigned int y,
                  int r, pixel *p)
{
     struct _pm *l;
     int i, j;
     unsigned int a,k;
 
     l = malloc((2*r+1)*(2*r+1)*sizeof(struct _pm));
     if ( l != NULL )
     {
         a = 0;
         for(i=-r; i <= r; i++)
         {
           for(j=-r; j <= r; j++)
           {
                for(k=0; k < 3; k++)
                {
                    l[a].p[k] = GET_PIXEL(m,XGET(x+i),YGET(y+j))[k];
                }
                l[a].lum = (2126*l[a].p[0] + 7152*l[a].p[1] +
                            722*l[a].p[2]) / 10000;
                a++;
           }
         }
         qsort(l, (2*r+1)*(2*r+1), sizeof(struct _pm), _cmp);
         for(k=0;k<3;k++)
         {
           (*p)[k] = l[r].p[k];
         }
         free(l);
     }
}


The median filter:

Код

image median_filter(image si, int r)
{
   unsigned int x, y;
   image dst;
   pixel op;
 
   dst = alloc_img(si->width, si->height);
   if ( dst != NULL )
   {
     for(x=0; x < si->width; x++)
     {
        for(y=0; y < si->height; y++)
        {
           _get_median(si, x, y, r, &op);
           put_pixel_unsafe(dst, x, y, op[0], op[1], op[2]);
        }
     }
   }
   return dst;
}


Usage example:

Код

#include <stdio.h>
#include "imglib.h"
 
int main()
{
    image input, ei;
 
    input = get_ppm(stdin);
    if ( input == NULL ) return 1;
    ei = median_filter(input, 2);
    free_img(input);
    if ( ei != NULL )
    {
        output_ppm(stdout, ei);
        free_img(ei);
    }
}


Во-первых, что это за библиотека "imglib.h"? Компилятор её не находит.
Во-вторых по-ходу это всё происходит в консоли,как бы это занести всё в Win32project (т.е. прога должна быть с интерфейсом).

PM MAIL   Вверх
bsa
Дата 23.11.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



А Google на что?
PM   Вверх
Barabeo
Дата 23.11.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну качнул я этот  imglib.Это dll.Кидаю в папку с проектом, всё тоже самое. 
PM MAIL   Вверх
bsa
Дата 23.11.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



так надо не только dll'ку, но и хидер. А lib вообще надо к проекту подключать.
PM   Вверх
Леопольд
Дата 23.11.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Barabeo @  23.11.2010,  14:54 Найти цитируемый пост)
Кидаю в папку с проектом
А линковаться?
dll - динамическая линковка
lib - статическая



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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