С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94

Реализация фильтра Собеля

05.12.2022, 08:47. Показов 1668. Ответов 15

Студворк — интернет-сервис помощи студентам
Подскажите, как написать код фильтр выделения границ на изображении на основе оператора Собеля и сравнить его работу с функцией, реализованной в Matlab. Сравнение выполнить с помощью std2
Задал маску в виде матрицы
Записал программу свёртки изображения с этой маской
Сравнил эти 2 результата.
Что не так?
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clc, clear
A=imread('C:\Users\s\M_Logo.png');% Чтение изображения
A_grey = rgb2gray(A);%Преобразование в полутоновое изображение
 
A=fspecial('sobel');%Маска Собеля
h=[-1 0 1]%Зададим фильтр
B=imfilter(A_grey,h,'conv')% фильтрация с использованием свертки
i1=B;
%Вывод трёх изображений в одном окне
subplot(1,3,1), imshow(A), title('Оригинал');
subplot(1,3,2), imshow(B), title('Собель');
 
hsy = [-1 0 1; -2 0 2; -1 0 1];
hsz = [-1 -2 -1; 0 0 0; 1 2 1];
i2=imfilter(A, hsy);
i3=imfilter(A, hsz);
i4 = abs(i2)+abs(i3);
std2(i1-i4)
subplot(1,3,3), imshow(i4), title('Маска матрицы');
Пишет ошибки:
Matlab M
1
2
3
4
5
Undefined function 'fspecial' for input arguments of type 'char'.
 
Error in (line 5)
A=fspecial('sobel');%Маска Собеля
>>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2022, 08:47
Ответы с готовыми решениями:

Реализация фильтра Собеля без Imfilter и Edge
Доброго времени суток, пытаюсь реализовать фильтр Собеля без встроенных функций Matlab'a, но к сожалению не получается, ошибка на мой...

Реализация БИХ-фильтра
Уважаемые форумчане! Еще не приходилось работать в matlab, но уже дали задание. Кто поможет с решением, буду очень благодарен. Вообще с...

Реализация фильтра Винера или Чебышева
Очень нужно реализовать алгоритм фильтра Винера на C#... Или Наименьших квадратов или Чебышева. Знаю, что на матлабе это делается легко. ...

15
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
05.12.2022, 15:01
menachem, возможно, у вас не установлен Image Processing Toolbox
1
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94
06.12.2022, 08:09  [ТС]
Вот новая версия:
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clc, clear
A=imread('C:\Users\M_Logo.png');% Чтение изображения
A_grey = rgb2gray(A);%Преобразование в полутоновое изображение
 
A=fspecial('sobel');%Маска Собеля
h=[-1 0 1]%Зададим фильтр
B=imfilter(A_grey,h,'conv')% фильтрация с использованием свертки
i1=B;
%Вывод трёх изображений в одном окне
subplot(1,3,1), imshow(A), title('Оригинал');
subplot(1,3,2), imshow(B), title('Собель');
 
hsy = [-1 0 1; -2 0 2; -1 0 1];
hsz = [-1 -2 -1; 0 0 0; 1 2 1];
i2=imfilter(A, hsy);
i3=imfilter(A, hsz);
i4 = abs(i2)+abs(i3);
std2(i1-i4)
subplot(1,3,3), imshow(i4), title('Маска матрицы');


Matlab M
1
2
3
4
5
6
7
Warning: MATLAB has disabled some advanced graphics rendering features by switching to software OpenGL. For more information, click here. 
Error using  - 
Integers can only be combined with integers of the same class, or scalar doubles.
 
Error in Untitled (line 18)
std2(i1-i4)
>>
Перевод:
Целые числа могут быть объединены только с целыми числами того же класса или скалярными двойниками.

Нужно преобразовывать матрицы изображений?

Добавлено через 1 минуту
АлександрКом, такой компонент установлен
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
06.12.2022, 15:13
Цитата Сообщение от menachem Посмотреть сообщение
Нужно преобразовывать матрицы изображений?
судя по всему, да
0
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94
07.12.2022, 11:07  [ТС]
Добавил преобразование
Matlab M
1
im2double

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
clc, clear
A=imread('C:\Users\M_Logo.png');% Чтение изображения
A_grey = rgb2gray(A);%Преобразование в полутоновое изображение
 
A=fspecial('sobel');%Маска Собеля
h=[-1 0 1]%Зададим фильтр
B=imfilter(A_grey,h,'conv')% фильтрация с использованием свертки
Y=im2double(B)
i1=B;
%Вывод трёх изображений в одном окне
subplot(1,3,1), imshow(A), title('Оригинал');
subplot(1,3,2), imshow(B), title('Собель');
 
hsy = [-1 0 1; -2 0 2; -1 0 1];
hsz = [-1 -2 -1; 0 0 0; 1 2 1];
i2=imfilter(A, hsy);
i3=imfilter(A, hsz);
i4 = abs(i2)+abs(i3);
X=im2double(i4)
std2(i1-i4)
subplot(1,3,3), imshow(i4), title('Маска матрицы');
Ту же самую ошибку пишет...
Какое то другое преобразование нужно делать?

Добавлено через 1 час 15 минут
Ошибка была в коде.
Исправил
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[SPOILER]clc, clear
A=imread('C:\Users\M_Logo.png');% Чтение изображения
A_grey = rgb2gray(A);%Преобразование в полутоновое изображение
 
A=fspecial('sobel');%Маска Собеля
h=[-1 0 1]%Зададим фильтр
B=imfilter(A_grey,h,'conv')% фильтрация с использованием свертки
Y=im2double(B)
i1=Y;
%Вывод трёх изображений в одном окне
subplot(1,3,1), imshow(A), title('Оригинал');
subplot(1,3,2), imshow(B), title('Собель');
 
hsy = [-1 0 1; -2 0 2; -1 0 1];
hsz = [-1 -2 -1; 0 0 0; 1 2 1];
i2=imfilter(A, hsy);
i3=imfilter(A, hsz);
i4 = abs(i2)+abs(i3);
X=im2double(i4)
std2(i1-i4)
subplot(1,3,3), imshow(i4), title('Маска матрицы');[/SPOILER]
Matlab M
1
2
3
4
Arrays have incompatible sizes for this operation.
 
Error in laba2_v2 (line 20)
std2(i1-i4)
Перевод: Массивы имеют несовместимые размеры для этой операции.

Теперь матрицы нужно приводить к одному размеру?
Как это сделать?


Добавлено через 28 минут
АлександрКом, Я так понимаю нужно добавить столбец или строку в одну из матриц...
Как это сделать и в какую из матриц добавлять?

Добавлено через 1 час 55 минут
нашёл такой пример
Matlab M
1
2
3
4
5
6
7
8
9
I_exp=B; 
I_exp  (  ((s(1)+1):(s(1)+3)),  ((s(2)+1):(s(2)+3)) 
)=0;%добавляем к краям изображения строки и столбцы %умножаем поэлементно матрицу и фильтруюшую маску 
for x= 1:s(1); 
    for y=1:s(2) 
         I_win=I_exp (x:x+2,y:y+2); 
         J(x,y)=sum(sum(I_win.* W)); 
     end; 
end;
как это применить к моей работе пока не знаю.
Подскажите.
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,757
07.12.2022, 11:59
menachem, ты что делаешь? A у тебя маска Собеля, размером 3x3 скорее всего. Такой же размер имеет и i4, a i1 это у тебя большое изображение 100500x100500 пикселей. В Workspace window иногда смотреть нужно!
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
07.12.2022, 12:49
menachem, если вы почитаете справку к fspecial('sobel'), то увидите, что данная функция возвращает ядро фильтра 3х3 для поиска только горизонтальных границ. Поэтому данные строки кода должны дать один и тот же результат:
Matlab M
1
2
3
A_grey = rgb2gray(A);%Преобразование в полутоновое изображение
h = fspecial('sobel');%Маска Собеля
B = imfilter(A_grey, h, 'conv')% фильтрация с использованием свертки
Matlab M
1
2
hsz = [-1 -2 -1; 0 0 0; 1 2 1];
i3 = imfilter(A_grey, hsz);
0
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94
07.12.2022, 13:34  [ТС]
какого размера тогда лучше использовать изображение?

Добавлено через 2 минуты
АлександрКом, да, матрицы обои размером 3х1
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
07.12.2022, 14:51
Цитата Сообщение от menachem Посмотреть сообщение
какого размера тогда лучше использовать изображение?
Для кода выше - любого
Цитата Сообщение от menachem Посмотреть сообщение
да, матрицы обои размером 3х1
какие матрицы?
0
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94
08.12.2022, 11:10  [ТС]
АлександрКом, Матрицы i1 и i4
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,757
08.12.2022, 18:14
Цитата Сообщение от menachem Посмотреть сообщение
да, матрицы обои размером 3х1
может 3x3?
0
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94
10.12.2022, 14:39  [ТС]
Подскажите как сравнить 2 результата? с помощью std2(....)

u235, наверное немного ошибся
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
clc, clear
A=imread('C:\Users\M_Logo.png');% Чтение изображения
A_grey = rgb2gray(A);%Преобразование в полутоновое изображение
 
A=fspecial('sobel');%Маска Собеля
h=[-1 0 1];%Зададим фильтр
B=imfilter(A_grey,h,'conv');% фильтрация с использованием свертки
Y=im2double(B);
 
hsy = [-1 0 1; -2 0 2; -1 0 1];
hsz = [-1 -2 -1; 0 0 0; 1 2 1];
i2=imfilter(A, hsy);
i3=imfilter(A, hsz);
i4 = abs(i2)+abs(i3);
X=im2double(i4);
cz=size(X)
ca=size(Y)

Command Window
Matlab M
1
2
3
4
5
6
7
8
cz =
 
     3     3
 
 
ca =
 
   806   897
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
12.12.2022, 11:41
menachem, в первой части кода вы пропускаете через фильтр A_grey (полутоновое изображение). Во второй части кода вы делаете бессмысленную вещь - пропускаете через фильтр ядро преобразования Собеля (А).
1
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94
13.12.2022, 09:25  [ТС]
АлександрКом, Вот такой план:
Задача написать фильтрацию изображения оператором Собеля:
-с помощью маски h=fspecial('sobel'); провести фильтрацию функцией imfilter
Это результат номер 1
-задать маску в виде матрицы
-свёртка изображения с этой маской
Результат номер 2
Сравнить результаты 1 и 2 по их разности и определить СКО этой разности с помощью std2

Ввиду того что размерности матриц разные, std2 не выполняеться
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
13.12.2022, 12:00
Цитата Сообщение от menachem Посмотреть сообщение
-свёртка изображения с этой маской
вы этого не делаете, вы делаете свёртку одной маски с другой. Смотрите внимательно на имена ваших переменных.
0
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 94
17.12.2023, 13:37  [ТС]
Вот что в результате получилось: прикрепил к сообщению
[delete]
Миниатюры
Реализация фильтра Собеля  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2023, 13:37
Помогаю со студенческими работами здесь

Ошибка invalid floating point operation в Delphi при реализации фильтра Собеля
Помогите разобраться, в чем ошибка при реализации фильтра Собеля var Form1: TForm1; c:TColor; r,g,b:byte; My:array of integer;...

Оператор Собеля. Реализация С++
Подскажите, в чем проблема? Если использовать cvFilter2D для свёртки, то все отлично, НО мне именно надо самому эту свертку организовать. ...

Реализация фильтра Габора в С++
Здраствуйте,мне необходим код реализации фильтра Габора для изображений с использованием старонней библиотеки OpenCV в Visual...

Реализация фильтра в QSortFilterProxyModel
Доброго времени суток. Имеется класс унаследованный от QAbstractTableModel и QTableView. В модели есть столбик данных QDate. Как, с...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru