How to apply directional gaussian filters to an image?

조회 수: 25 (최근 30일)
anastasia
anastasia 2017년 3월 3일
댓글: PaulLe 2020년 1월 20일
I have an image I(X,Y) and I wish to filter it using the difference of Gaussian filter for different directions. Since I do not know the direction of particular lines in the image, I want to implement a 12 directional filters each of them tuned to a specific orientation θi ∈ [−π/2, π/2], i = 1, . . . , 12. The output of the directional filter is then compared with the output of an omnidirectional filter. We will use Gaussian filters for this purpose. Considering both contributions, the filter impulse response is given by
hθ(x, y) = G1(x, y) G2(x, y)
This is the difference of gaussian filter which I wish to convolve with my image.
Ii(x, y) = hθi(x, y) I(x, y) for i=1 to 12
This is the code I have executed for difference of Gaussian filter.
My filter parameters are as given below:
N = 12 filters,
σx1 = 40, σy1 = 40, σx2 = 3, σy2 = 0.5
and the window size is 11x11
clc;
clear all;
close all;
hsize=[11, 11];
a=(imread('os.jpg'));
a1=rgb2gray(a);
figure();
imshow(a1);
h1=imgaussfilt(a1, [40, 40], 'filterSize', [11, 11]);
h2=imgaussfilt(a1, [3, 0.5], 'filterSize', [11,11]);
imshow(h2)
DoG=h1-h2;
imshow(DoG);
  댓글 수: 1
Matteo Fadda
Matteo Fadda 2018년 4월 15일
how can I extend this example for all 12 directions? thank you

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2017년 3월 4일
Like it said, Gaussians are an omnidirectional filter. That's what it says: "The output of the directional filter is then compared with the output of an omnidirectional filter. We will use Gaussian filters for this purpose." It can be made non-rotationally symmetrix. But I don't know what the "directional" filter it mentions is.
Using gausfilt() or fspecial() will give you symmetric Gaussians, though you could resize them with imresize() though that just sizes along the x or y axes. If you want to rotate also, then call resize and then call imrotate().
  댓글 수: 1
PaulLe
PaulLe 2020년 1월 20일
Dear Image Analyst,
How can I extend this example for all 8 directions?
Thank you so much.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Braiki Marwa
Braiki Marwa 2017년 5월 17일
Hello,
I want to apply the gaussian filter .I write this code but it's not working
for i=1:nb1_iteration
Iblur1= imgaussfilt(im,0.5);
end
  댓글 수: 3
Braiki Marwa
Braiki Marwa 2017년 5월 18일
편집: Image Analyst 2017년 5월 18일
I want to apply the process of filtering for different iterations and see the effect.
Image Analyst
Image Analyst 2017년 5월 18일
OK, good luck.

댓글을 달려면 로그인하십시오.


Gustavo Liñan
Gustavo Liñan 2017년 11월 21일
편집: Gustavo Liñan 2017년 11월 21일
I use this type of rotated filters many times when I create algorithms using the histogram of orientations. What I do, in these cases, is, First, I create the non-simetric filter (e.g. gaussian with \sigmaX != \sigmaY, or LoG...). Then I define the rotation vector (typically, Phi=0:pi/Step:pi) and for each rotation angle I create the rotated filter basically, I consider the filter an image, apply image rotation with the bicubic interpolation and 'loose' option. Finally, I take the filter out of its rotated image by cropping it to the correct size.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by