Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/33: Рейтинг темы: голосов - 33, средняя оценка - 4.88
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
1

Обработка изображений

04.03.2016, 11:29. Просмотров 6593. Ответов 22
Метки нет (Все метки)

Тема будет посвящена двухмерному преобразованию Фурье и обработкой изображений на его основе (корреляция, масштабирование, вращение).

Прямое 2D преобразование Фурье:
Кликните здесь для просмотра всего текста
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
subroutine FFTF_2D(N,M,U,UFFT)
use IMSL
integer*4 i,j,n
double complex , dimension (256,256) :: U,UFFT
double complex , dimension (256) :: XK,YK
    do j=1,M
        do i=1,N
        XK(i)=U(i,j)   ! по строкам
        end do
    call DFFTCF(n,XK,YK)
        do i=1,N
        UFFT(i,j)=YK(i)
        end do
    end do              !   UX(i,j) 
    do i=1,N
        do j=1,M
        XK(j)=UFFT(i,j)
        end do
    call DFFTCF(M,XK,YK)
        do j=1,M
        UFFT(i,j)=YK(j)
        end do
    end do
return
end
Обратное 2D преобразование Фурье:
Кликните здесь для просмотра всего текста
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
subroutine FFTB_2D(N,M,U,UFFT)
use IMSL
integer*4 i,j,n
double complex , dimension (256,256) :: U,UFFT,UX,UY
double complex , dimension (256) :: XK,YK
    do j=1,M
        do i=1,N
        XK(i)=U(i,j)   ! по строкам 
        end do
    call DFFTCB(N,XK,YK)
        do i=1,N
        UFFT(i,j)=YK(i)
        end do
    end do              !   UX(i,j) 
    do i=1,n
        do j=1,M
        XK(j)=UFFT(i,j)
        end do
    call DFFTCB(M,XK,YK)
        do j=1,M
        UFFT(i,j)=YK(j)
        end do
    end do
return
end


И ещё литература...
Та, что попалась "под горячую руку"...

Прежде чем приступить к обработке, необходимо "вытащить" информацию из файла картинки. Проще всего использовать bmp- файлы. Структура файла приведена здесь.

Как превратить RGB в градации серого написано здесь.
...согласно стандарту BT.709 интенсивность пикселя может быть вычислена следующим образом: Y = 0.2125·R + 0.7154·G + 0.0721·B. Соответственно, если для каждого пикселя значение каждой из его компонент заменить на вычисленную интенсивность, получится изображение в оттенках серого в цветовой модели RGB.
... и не забывайте про то, что все значения, большие 255, должны становиться равными 255.
3
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2016, 11:29
Ответы с готовыми решениями:

Низкочастотная фильтрация изображений (книга Гонсалеса “Цифровая обработка изображений”)
Здравствуйте. Я пытаюсь реализовать на java низкочастотную фильтрацию изображений. Реализую по...

Обработка изображений. Изменение размеров изображений
Подскажите пожалуйста, как изменить размер изображения в MathCad. Какой код нужен для...

Обработка изображений
Подскажите пожалуйста, какими средствами можно реализовать задачу: есть картинка карты Украины, как...

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

22
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
04.03.2016, 17:54  [ТС] 2
Итак, получаем двухмерный массив A(x,y) который в дальнейшем будем подвергать преобразованию Фурье.
Исходная и преобразованная в 256 градаций серого картинки см. ниже.
Качество преобразованной картинки оставляет желать лучшего, т.к. выведена в Surfer-8, я там нормальную шкалу не смог подобрать Но на результат это не повлияет!
0
Миниатюры
Обработка изображений  
Изображения
 
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
04.03.2016, 21:49  [ТС] 3
Замечу только, что сразу тупо брать БПФ от полученного массива не рекомендуется...
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
06.03.2016, 18:25  [ТС] 4
Но, для проверки работоспособности программы, мы все же сделаем прямое и обратное преобразование.
Урежем картинку до размера 132х132.
Рис.1 - исходная картинка. Рис.2 -логарифм модуля двухмерного преобразования Фурье
Рис.3 - восстановленная картинка
0
Миниатюры
Обработка изображений  
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
07.03.2016, 19:00  [ТС] 5
Теперь с помощью функции взаимной корреляции найдём координаты фрагмента изображения.
В середине - исходная картинка 132х132. Справа вверху - фрагмент картинки 56х56 (дополнен нулями до 132х132)
Внизу - функция взаимной корреляции.
0
Миниатюры
Обработка изображений  
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
07.03.2016, 19:01  [ТС] 6
Полезно почитать вот это.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
08.03.2016, 21:29  [ТС] 7
И ещё одно замечание. Я брал данные из bmp -файла. Первая точка изображения в файле находится в левом нижнем углу. Соответственно в таком же порядке заполнялись массивы.
Таким образом вектор сдвига изображения на функции взаимной корреляции имеет координаты:
(левый нижний угол картинки, максимум ФВК)
0
Миниатюры
Обработка изображений  
435 / 101 / 15
Регистрация: 21.02.2015
Сообщений: 845
10.03.2016, 08:58 8
Цитата Сообщение от A_Santik Посмотреть сообщение
call DFFTCF(n,XK,YK)
не знаю фортран, видимо вы пользуетесь готовыми функциями, что делать если
в стороннем языке нет такой? есть исходники что там внутри?
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
10.03.2016, 09:33  [ТС] 9
Это подпрограмма из библиотеки IMSL.
Не знаю на каком языке Вы пишете, но по крайней мере для Си аналогичные библиотеки есть!
Могу дать ссылку на текст аналогичной программы FFT (опять же Фортран). Но Фортран очень простой язык. Переписать на нужный вряд ли составит большой труд.
Цитата Сообщение от Valakin Посмотреть сообщение
DFFTCF(n,XK,YK)
D - двойная точность
FFT - БПФ
С - комплексное
F - (forward) прямое, В - обратное
0
435 / 101 / 15
Регистрация: 21.02.2015
Сообщений: 845
10.03.2016, 09:48 10
Цитата Сообщение от A_Santik Посмотреть сообщение
Переписать на нужный вряд ли составит большой труд
да, наверное, код нужен чтобы переписать его на java,
но похоже есть еще функции которые надо переписывать
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
10.03.2016, 10:03  [ТС] 11
Э.Р. Канасевич "Анализ временных последовательностей в геофизике" Стр. 53
А вот текст на java
1
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
11.03.2016, 10:06  [ТС] 12
Смысл то в чём... Двухмерное ПФ не слишком от одномерного отличается
0
75 / 75 / 8
Регистрация: 24.09.2015
Сообщений: 342
11.03.2016, 10:43 13
A_Santik, а будет ли про вычисление угла поворота?

Или лучше о том как все одновременно в оптической мыши.

Интересна также точность вычисления линейных смещений при движение с поворотом (теоретическая и с учетом сигнал/шум)
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
11.03.2016, 10:52  [ТС] 14
Цитата Сообщение от Papayaved Посмотреть сообщение
A_Santik, а будет ли про вычисление угла поворота?
Или лучше о том как все одновременно в оптической мыши.
Будет...
С мышкой сложнее - там же "внутри" обработка. Но я же вроде ссылку давал, как информационный сигнал (картинку) вытащить.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
28.03.2016, 15:38  [ТС] 15
Как из оптической мышки "вытащить" изображение.

Итак, рассмотрим поворот изображения на произвольный угол. Можно, конечно, обойтись и без двухмерного преобразования Фурье (см. здесь). Но это долго.

Вот еще хорошая статья, посвященная обработке изображений.

Теоретическая часть.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
28.03.2016, 17:11  [ТС] 16
Для проверки сначала сделаем какое-нибудь простое преобразование с использованием двумерного БПФ.
Например поворот на 180 градусов.
0
Изображения
 
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
28.03.2016, 17:14  [ТС] 17
Fortran
1
2
3
4
5
6
7
8
9
W1=Width
H1=Height   
call FFTF_2D(H1,W1,U,UFFT)
    do k=1,H1
    do  i=1,W1  
    UFFT3(i,k)=UFFT(W1-i+1,H1-k+1)
    end do
    end do
call FFTB_2D(H1,W1,UFFT3,U3)
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
29.03.2016, 22:22  [ТС] 18
Иногда удобнее работать с сигналом RGB. Но тогда необходимо делать двумерное БПФ для каждого цвета.
"Отзеркаливание" и поворот на 90 градусов по часовой стрелке.
Справа - исходная картинка.
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    W1=Width
    H1=Height   
    call FFTF_2D(H1,W1,UR,UFFTR)
    call FFTF_2D(H1,W1,UG,UFFTG)
    call FFTF_2D(H1,W1,UB,UFFTB)
    do k=1,H1
    do  i=1,W1  
    UFFT1R(i,k)=UFFTR(k,i)
    UFFT1G(i,k)=UFFTG(k,i)
    UFFT1B(i,k)=UFFTB(k,i)
    end do
    end do
    call FFTB_2D(H1,W1,UFFT1R,UR)
    call FFTB_2D(H1,W1,UFFT1G,UG)
    call FFTB_2D(H1,W1,UFFT1B,UB)
0
Изображения
  
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
30.03.2016, 18:14  [ТС] 19
Дальнейшие тренировки будем проводить на кошках колонках
Простой поворот на 180 градусов
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    W1=Width
    H1=Height   
    call FFTF_2D(H1,W1,UR,UFFTR)
    call FFTF_2D(H1,W1,UG,UFFTG)
    call FFTF_2D(H1,W1,UB,UFFTB)
    do k=1,H1
    do  i=1,W1  
    UFFT1R(i,k)=DCONJG(UFFTR(i,k))   !DCONJG - функция комплексного сопряжения
    UFFT1G(i,k)=DCONJG(UFFTG(i,k))
    UFFT1B(i,k)=DCONJG(UFFTB(i,k))
    end do
    end do
    call FFTB_2D(H1,W1,UFFT1R,UR)
    call FFTB_2D(H1,W1,UFFT1G,UG)
    call FFTB_2D(H1,W1,UFFT1B,UB)
Слева- исходная картинка.
0
Изображения
  
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
31.03.2016, 08:44  [ТС] 20
А вот такое преобразование
Fortran
1
2
3
4
5
6
7
do k=1,H1
    do  i=1,W1
    UFFT1R(i,k)=DCONJG(UFFTR(k,i))   !DCONJG - функция комплексного сопряжения
    UFFT1G(i,k)=DCONJG(UFFTG(k,i))
    UFFT1B(i,k)=DCONJG(UFFTB(k,i))
    end do
    end do
даёт "отзеркаливание" картинки и поворот на 90 градусов против часовой стрелки.
0
Изображения
 
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2016, 08:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обработка изображений Qt
Добрый вечер, необходимо написать программу по обработке изображений в Qt. Отпишитесь, кто знаком с...

Обработка изображений
Граждане!есть ли у кого-нибудь исходник простой программки(написал бы сам,да работаю,времени нет...

Обработка изображений
Помогите с исправлением ошибок.

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.