Áp dụng bộ lọc Gabor cho hình ảnh đầu vào


11

Tôi đã thử áp dụng bộ lọc Gabor với thang đo cụ thể (theo giá trị lambda và sigma của tôi, vì vậy nó là ( 7x7 ) và cho 4 định hướng (0, ,ππ43ππ2 ) đến một hình ảnh tỷ lệ xám đầu vào.3π4

Trong mã của tôi, ba bước đạt được:

  1. Tạo bộ lọc Gabor

  2. Đọc một hình ảnh RGB, sau đó chuyển đổi nó sang thang màu xám và cuối cùng thành gấp đôi.

  3. Áp dụng gabor đã tạo cho hình ảnh đầu vào ( ở đây, tôi không chắc mã của tôi có đúng không, đó là lý do tại sao tôi cần ý kiến ​​của bạn )

1) -------------- tạo bộ lọc Gabor (kích thước = 7x7 và 4 hướng)

%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=...');

nhập mô tả hình ảnh ở đây

2) ------------ Đọc hình ảnh đầu vào

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);

nhập mô tả hình ảnh ở đây

3) ----- áp dụng gabor đã tạo ở trên cho hình ảnh đầu vào (nhớ lại rằng tôi không chắc mã trong bước này có đúng 100% không, đó là lý do tại sao tôi cần ý kiến ​​của bạn và sự giúp đỡ của bạn nếu bạn có câu trả lời đúng. )

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

nhập mô tả hình ảnh ở đây


Ngoài ra, nếu bạn đang sử dụng conv2, vui lòng sử dụng tùy chọn 'cùng'.
Birdga Tolga

Lỗi: Tệp: Practiceise1.m Dòng: 3 Cột: 7 Biểu thức ở bên trái của dấu bằng không phải là mục tiêu hợp lệ cho một bài tập. Tôi đã tìm thấy lỗi này khi tôi chạy mã này
Engr Rao Zaka

Bộ lọc này không phải là 7x7?
jiggunjer

Câu trả lời:


1

Mã của bạn là chính xác và kết quả là phù hợp. Bạn có thể ngạc nhiên bởi chúng do một số 'tính năng ẩn'.

Đầu tiên, conv2trả về mặc định toàn bộ tích chập, sao cho kết quả là kích thước của hình ảnh cộng với đường viền bằng một nửa kích thước của hạt nhân (nghĩa là tổng kích thước nếu kích thước của hình ảnh cộng với kích thước của hạt nhân). Khi bạn giải thích kết quả của bạn, hãy nhận ra nó!

Thứ hai, kết quả đại diện cho các hệ số mạnh hơn cho mối tương quan cao hơn giữa hạt nhân của bạn và bản vá hình ảnh cục bộ của bạn: như mong đợi, bạn cũng trích xuất các đường viền của hình ảnh. Xem cụ thể kết quả ngoài cùng bên trái của bạn hiển thị đường thẳng đứng mạnh mẽ.

Cuối cùng, imagesctỷ lệ theo mặc định tỷ lệ giữa hệ số cao nhất đến thấp nhất. Đó là lý do tại sao trong kết quả ngoài cùng bên trái, bạn chủ yếu nhìn thấy đường viền.

Có các tùy chọn khác nhau để conv2mô tả trong help conv2đó cho phép kiểm soát hành vi này.

Cũng lưu ý rằng có nhiều định nghĩa khác nhau về hạt nhân để phát hiện các cạnh, chẳng hạn như log-Gabors

các loại bộ lọc khác nhau.

Nếu bạn quan tâm đến việc triển khai đầy đủ (bằng python), bạn có thể xem tại: https://pythonhosted.org/LogGabor/ (tự cắm không biết xấu hổ).


0

Mã của bạn là chính xác. Bạn chỉ cần thực hiện tích chập 2-D với nhân bộ lọc mà bạn đang làm rất tốt.

Chúc may mắn


Tôi không thể hiểu bạn. Bạn đang thực hiện Chuyển đổi 2 chiều (vì bạn đang sử dụng chức năng conv2). Một cách khác là nhân phép trong miền tần số (vì tích chập trong thời gian hoặc miền không gian tương đương với phép nhân trong miền tần số). Tuy nhiên, bạn không cần phải làm điều đó, vì về cơ bản, conv2 cũng làm điều tương tự (bên trong !!!)
Ujjwal Aryan

Chính xác :) ,, bạn có biết mô hình HMAX không? (các lớp S1, C1, S2, C2 ...). Bây giờ tôi đang cố gắng tính toán lớp C1 (hoạt động tối đa giữa các đơn vị S1), bạn có biết một số ý tưởng về điều đó (mã MATLAB) không?
Liszt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.