【问题标题】:Gabor filter code errorGabor 滤波器代码错误
【发布时间】:2012-02-14 07:29:42
【问题描述】:

编辑:GABOR FILTER 的描述

% gab2d:**2D Gabor 过滤器** % Gabor 滤波器基本上是一个高斯滤波器,由一个复正弦波调制 % G = gab2d(I,Sx,Sy,f,theta,FUN) % 输入和输出参数([] 是可选的): % I(矩阵)大小为 NxM:输入图像大小为 NxM。 gamma(标量):空间纵横比,x 到 y。 lambda(scalar):正弦函数的波长。 b(标量):空间频率带宽(以八度为单位) theta(标量):gabor 滤波器的方向。 % phi(标量):相位偏移。 0 是 Gabor 滤波器的实部或 % 偶对称,pi/2 是 Gabor 滤波器的虚部或 % 奇对称。 % **笔记**: sigma(标量):Gabor 滤波器或标准的传播 高斯的百分比偏差是根据 lambda 和 b 自动计算的。 % [shape] (strings): conv2 的形状。请参阅帮助 conv2。默认为“相同”。 % % GO(矩阵)大小为 NxM:应用 Gabor 的输出图像 % 过滤器。这是幅度响应。 大小为 (2Sx+1)x(2Sy+1) 的 % [GF](矩阵):Gabor 滤波器。
function [GO, GF] = gab2d(I, gamma, lambda, b, theta, phi, shape)

I=imread('C:\Users\Vinay\Documents\MATLAB\textureflawimages\text9.png');

gamma = 1; b = 1; theta = 0:pi/6:pi-pi/6; phi = 0; shape = 'valid'; lambda=8;

if nargin < 7, shape = 'same'; end;

if isa(I, 'double') ~= 1, I = double(I); end

sigma = (1 / pi) * sqrt(log(2)/2) * (2^b+1) / (2^b-1) * lambda;

Sy = sigma * gamma;

for x = -fix(sigma):fix(sigma)

    for y = -fix(Sy):fix(Sy)

        xp = x * cos(theta) + y * sin(theta);

        yp = y * cos(theta) - x * sin(theta);

        GF(fix(Sy)+y+1,fix(sigma)+x+1) = ...

        exp(-.5*(xp^2+gamma^2*yp^2)/sigma^2) * cos(2*pi*xp/lambda+phi) ...

        ; %/ (2*pi*(sigma^2/gamma));

        % Normalize if you use different sigma (lambda or b)
    end
end
GO = conv2(I, double(GF), shape);

错误:

???错误使用 ==> mpower 矩阵必须是正方形。

==> gab2d 中的错误在 36 GF(fix(Sy)+y+1,fix(sigma)+x+1) = ...

我无法纠正这个问题..

请帮忙

【问题讨论】:

  • 那是什么语言?另外,是否可以整理格式以使其更具可读性?

标签: image matlab image-processing


【解决方案1】:

theta 是一个数组。因此,例如xp 也是一个数组。如果要对xp 的每个元素求平方,则需要使用逐元素运算符,例如.^ 用于幂,或.* 用于乘法。

为了更快地找出问题所在,通过在命令行输入dbstop if error 将调试器设置为在出现错误时停止。这使您可以通过将鼠标悬停在编辑器中的所有变量上来检查它们,并评估复杂表达式的一小部分以缩小错误范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 2011-07-04
    • 1970-01-01
    • 2023-03-19
    • 2014-07-14
    • 2015-10-24
    • 2019-12-02
    • 2014-08-12
    相关资源
    最近更新 更多