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

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

04.03.2016, 11:29. Просмотров 4547. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2016, 11:29
Ответы с готовыми решениями:

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

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

Печать сканированных изображений в масштабе 1:1 с исходником
Сканирую документ. Хочу, чтобы как в ксеро - напечатать один-в-один. А сканер...

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

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

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

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

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

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

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

Теоретическая часть.
0
A_Santik
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
28.03.2016, 17:11  [ТС] 16
Для проверки сначала сделаем какое-нибудь простое преобразование с использованием двумерного БПФ.
Например поворот на 180 градусов.
0
Изображения
 
A_Santik
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
A_Santik
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
Изображения
  
A_Santik
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
Изображения
  
A_Santik
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
Изображения
 
31.03.2016, 08:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2016, 08:44

Обработка изображений
Здравствуйте! Помогите пожалуйста. Нужно в какой-либо массив загрузить до 100...

Обработка изображений
Добрый день. Изучаю методы обработки изображений и при выполнении некоторых...

Обработка изображений
Здравствуйте! Пробую разобраться с частотной обработкой изображений. В инете...


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

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

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