입력 이미지에 가보 필터 적용


11

람다 및 시그마 값에 따라 특정 스케일로 Gabor 필터를 적용하려고 했으므로 ( 7x7 ) 4 방향 (0, , 및 )를 입력 회색조 이미지로 변환합니다.π4π2π4

내 코드에서는 세 단계가 수행됩니다.

  1. 가버 필터 만들기

  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를 사용하는 경우 '동일한'옵션과 함께 사용하십시오.
Tolga Birdal

오류 : 파일 : practise1.m 줄 : 3 열 : 7 등호 왼쪽의 표현식이 할당에 유효한 대상이 아닙니다. 이 코드를 실행할 때이 오류를 발견했습니다
Engr Rao Zaka

이 필터는 7x7이 아닙니까?
jiggunjer

답변:


1

코드가 정확하고 결과가 일관성이 있습니다. '숨겨진 기능'으로 인해 놀랄 수도 있습니다.

먼저 conv2기본적으로 전체 컨벌루션 (convolution )을 반환하여 이미지 크기에 커널 크기의 절반 (즉, 이미지 크기에 커널 크기를 더한 경우의 총 크기)을 더합니다. 결과를 해석 할 때 알고 있어야합니다!

둘째, 결과는 커널과 로컬 이미지 패치 사이의 높은 상관 관계에 대해 더 강한 계수를 나타냅니다. 예상대로 이미지의 경계도 추출합니다. 특히 강한 수직선을 보여주는 가장 왼쪽의 결과를 참조하십시오.

마지막으로, imagesc기본적으로 가장 높은 계수에서 가장 낮은 계수 사이의 스케일이 조정됩니다. 이것이 가장 왼쪽의 결과에서 주로 경계를 보는 이유입니다.

이 동작을 제어 할 수 conv2있는 다양한 옵션 help conv2이 있습니다.

log-Gabors와 같이 에지 감지를위한 커널 정의에는 여러 가지가 있습니다.

다른 유형의 필터.

전체 구현 (파이썬)에 관심이 있다면 https://pythonhosted.org/LogGabor/ (shameless self-plug 😇)를 살펴보십시오 .


0

코드가 정확합니다. 아주 잘하고있는 필터 커널로 2D 컨볼 루션을 수행하면됩니다.

행운을 빕니다


나는 당신을 이해할 수 없습니다. conv2 기능을 사용하는 것처럼 2 차원 컨벌루션을 수행하고 있습니다. 다른 방법은 주파수 영역에서 곱셈을 수행하는 것입니다 (시간 또는 공간 영역에서의 회선이 주파수 영역에서의 곱셈과 동일하기 때문에). 그러나 conv2는 본질적으로 동일한 것을 수행하기 때문에 (내부적으로 !!!)
Ujjwal Aryan

정확히 :), HMAX 모델을 알고 있습니까? (S1, C1, S2, C2 레이어 ...). 지금 C1 레이어 (S1 단위 사이의 최대 작동)를 계산하려고하는데 그에 대한 아이디어를 알고 있습니까 (matlab 코드)?
Liszt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.