0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 13
1

Выделение контуров на основе дескрипторов Фурье

01.12.2015, 23:02. Показов 2288. Ответов 5

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Требуется ваша помощь, уже имеется кусок программы в котором благополучно выделяется контур.
Matlab M
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
% global bin_img
clear all; clc;
%наши изображения
Img1 = imread('triangle.bmp');
Img2 = imread('star.bmp');
Img3 = imread('ellipse.bmp');
Img4 = imread('triangle2.bmp');
Img5 = imread('ellipse.bmp');
%диалог выбора изображения
CellStr = {'Треугольник'; 'Звезда'; 'Круг'};
[picture] = listdlg('ListString', CellStr,...
'SelectionMode','single','Name', 'Окно выбора', 'ListSize', [150 50], 'PromptString', 'Выберите изображение', 'fus', 5);
%переключение между изображениями с целью выбора необходимого для работы
disp(['Вы выбрали: ' CellStr{picture}]);
switch picture
   case 1
        Img = Img1;
   case 2
        Img = Img2;
   case 3
        Img = Img3;
end
%Выделим одну цветовую составляющую
Img=Img(:,:,1);
Img=logical(Img);
[N M]=size(Img);
figure, imshow(Img);
title ('Исходное изображение');
 
%Определение начальной точки обработки
     for i1=1:N;
         for j1=1:M;
            if Img(i1,j1)==1;
               p_i=i1;p_j=j1;               
               break
            end;            
         end;
            if Img(i1,j1)==1;               
               break
            end; 
     end;      
% Координаты начальной точки
x(1)=p_i;
y(1)=p_j;
 
contour=bwtraceboundary(Img, [p_i p_j], 'W');
hold on
plot(contour(:,2),contour(:,1),'g','LineWidth',2);
 
%Формирование двумерного массива данных
s=[x',y'];
 
[np,nc]=size(s);
if nc~=2
    error('!!!!!!!!!')
end
if np/2~=round(np/2);
    s(end+1,:)=s(end,:);
    np=np+1;
end
 
% Центройд
 
Img=bwlabel(Img);
STATS=regionprops(Img,'centroid');
 
% Прямое преобразование Фурье
z=fft(STATS.Centroid,64); % вынести в качестве параметра алгоритма
 
fdesc = abs(z);
fdesc = fdesc(2:32)/fdesc(1);
Теперь необходимо найти расстояние от центра масс до точки на границе контура, я прикрепил формулу по которой можно это сделать. Вот смотрите, CX и СY я уже получил при помощи STATS=regionprops(Img,'centroid'), правильно я понимаю? Я не могу понять как мне перебрать X и Y, просто точек на границе контура достаточно много. Всё это мне нужно для прямого преобразования Фурье.
А так же необходимо сравнить дескрипторы путём использования Евклидова расстояния, формулу я тоже прикрепил. Для использования Евклидова расстояния тоже понадобится цикл?
Моя проблема в том, что я примерно представляю как всё это сделать, но написать я не могу, ибо испытываю сложности с языком программирования, прошу помощи.
Изображения
  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2015, 23:02
Ответы с готовыми решениями:

Выделение контуров изображения
Добрый день, подскажите пожалуйста, как на андроиде реализовать выделение контуров изображения? ...

Реализовать выделение контуров на изображении
Ни разу не работал с обработкой изображений в среде С++. Может подскажет кто как с этим работать...

Выделение контуров на изображении градиентным методом
Программа должна брать исходный файлик с изображением и выделять контуры на изображении градиентным...

Выделение контуров на изображении градиентным методом
Программа должна брать исходный файл с изображением и выделять контуры на изображении градиентным...

5
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 13
01.12.2015, 23:55  [ТС] 2
Matlab M
1
2
3
4
5
6
7
8
9
STATS=regionprops(Img,'centroid');
 
for k=1:length(contour)
cx = STATS.Centroid(1);
cy = STATS.Centroid(2);
 
r=sqrt((cx-k)^2+(cy-k)^2);
 
end
Пытаюсь вычислить расстояние от центра масс до точки на границе контура таким способом, но в итоге я получаю всего одно число, а должен получить вектор с множеством всех значений расстояний от центра до контура, что я делаю не так?
0
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 13
01.12.2015, 23:56  [ТС] 3
Прошу прощения, совсем забыл выложить сам код.
Вложения
Тип файла: zip Furiye.zip (11.2 Кб, 22 просмотров)
0
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 6
08.01.2016, 18:39 4
добрый день, а можно узнать какие функции должна выполнять программа?
0
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 1
28.03.2016, 10:00 5
Vagesha, написали ли вы эту программу? можете скинуть код?
0
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 13
28.03.2016, 10:59  [ТС] 6
Да, программу написал, могу скинуть, только попозже
0
28.03.2016, 10:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2016, 10:59
Помогаю со студенческими работами здесь

Выделение фрагмента строки и создание новой на основе этого фрагмента
У меня есть переменная var a = 'file:///D:/папка/myfile.jpg' Мне нужно выделить из переменной a...

Разложить функцию в ряд Фурье и построить график суммы ряда Фурье
Здравствуйте. Дана задача: На интервале (-π;π) задана периодическая (с периодом 2π) функция...

Найти коэффиценты разложения в ряд Фурье, используя быстрое преобразование Фурье (БПФ)
Прошу помочь мне в нелеггкой задачке нужно для заданной на периоде 2∏ функции f(x) найти...

Количество дескрипторов
ОС Ubuntu Подскажите пожалуйста можно ли и как из самого приложения поднять именно на него...

счетчик дескрипторов
Здравствуйте. Вобщем накодил некую прогу, она работает и делает то что должна. Но. В диспетчера...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru