Застосуйте фільтр Gabor до вхідного зображення


11

Я спробував застосувати фільтр Gabor із певною шкалою (відповідно до моїх значень лямбда та сигми, так це ( 7x7 ) та для 4-х орієнтацій (0, , і ) до вхідного зображення сірого масштабу.π4π23π4

У моєму коді досягаються три етапи:

  1. Створіть фільтр Gabor

  2. Прочитайте RGB-зображення, потім перетворіть його в сірий масштаб і, нарешті, у подвійне.

  3. Застосувати створене gabor до вхідного зображення ( тут я не впевнений, чи справді мій код, тому мені потрібна ваша думка )

1) -------------- створити фільтр Gabor (розмір = 7x7 та 4 орієнтації)

%define the five parameters
theta=....; %either 0 or pi/4 or pi/2 or 3pi/4
lambda=3.5;
gamma=0.3;
sigma=2.8;
psi=0;

sigma_x = sigma;
sigma_y = sigma/gamma;

nstds = 5;
xmax = max(abs(nstds*sigma_x*cos(theta)),abs(nstds*sigma_y*sin(theta)));
xmax = ceil(max(1,xmax));
ymax = max(abs(nstds*sigma_x*sin(theta)),abs(nstds*sigma_y*cos(theta)));
ymax = ceil(max(1,ymax));
xmin = -xmax; ymin = -ymax;
[x,y] = meshgrid(xmin:xmax,ymin:ymax);

x_theta=x*cos(theta)+y*sin(theta);
y_theta=-x*sin(theta)+y*cos(theta);

gb= exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);

figure(2);
imshow(gb);
title('theta=...');
%imagesc(gb);
%colormap(gray);
%title('theta=...');

введіть тут опис зображення

2) ------------ Прочитайте вхідне зображення

I=imread('piano.jpg');
image_resize=imresize(I, [160,160]);
image_gray=rgb2gray(image_resize);
image_double=im2double(image_gray);
figure(1);
imshow(image_double);

введіть тут опис зображення

3) ----- застосуйте створене вище gabor до вхідного зображення (нагадайте, що я не впевнений, чи є код на цьому кроці 100% правдивим, тому мені потрібна ваша думка та ваша допомога, якщо ви маєте правильну відповідь. )

figure(3);
filtered = conv2(image_double,gb);
imagesc(filtered);
colormap(gray);
title('theta=....');

введіть тут опис зображення


Крім того, якщо ви використовуєте conv2, будь ласка, використовуйте його з опцією 'той же'.
Толга Бердал

Помилка: Файл: Practise1.m Рядок: 3 Стовпець: 7 Вираз зліва від знака рівності не є дійсною ціллю для призначення. Я виявив цю помилку під час запуску цього коду
Engr Rao Zaka

цей фільтр не 7x7?
jiggunjer

Відповіді:


1

Ваш код правильний, а результати послідовні. Вас можуть здивувати через деякі «приховані функції».

По-перше, conv2повертається за замовчуванням повне згортання, таким чином, що результатом є розмір зображення плюс межа в половину розміру ядра (тобто загальний розмір, якщо розмір зображення плюс розмір ядра). Коли ви інтерпретуєте свої результати, пам’ятайте про це!

По-друге, результати представляють коефіцієнти, які є сильнішими для вищої кореляції між вашим ядром та локальним патчем зображення: як очікувалося, ви також витягуєте межі зображення. Дивіться, зокрема, крайній лівий результат, який показує сильну вертикальну лінію.

Нарешті, imagescмасштаби за замовчуванням масштабують між найвищим та найнижчим коефіцієнтом. Ось чому в крайньому лівому результаті ви в основному бачите кордон.

conv2Описані різні варіанти, в help conv2яких дозволяють контролювати цю поведінку.

Майте на увазі також, що існує багато різних визначень ядер для виявлення ребер, таких як log-Gabors

різні типи фільтрів.

Якщо вас зацікавила повна реалізація (у python), ви можете ознайомитись з адресою: https://pythonhosted.org/LogGabor/ (безсоромний самовідвід 😇).


0

Ваш код правильний. Вам просто потрібно зробити 2-D згортку з ядром фільтра, який ви дуже добре робите.

Щасти


Я не в змозі вас зрозуміти. Ви робите 2-D згортання (як ви використовуєте функцію conv2). Інший спосіб - це розмноження в частотній області (оскільки згортання у часовій або просторовій області еквівалентно множенню в частотній області). Однак цього не потрібно робити, оскільки conv2 по суті робить те саме (внутрішньо !!!)
Ujjwal Aryan

Рівно :),, ви знаєте модель HMAX? (шари S1, C1, S2, C2 ...). Зараз я намагаюся обчислити рівень C1 (максимальна операція між одиницями S1), чи знаєте ви якісь ідеї про це (код matlab)?
Ліст
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.