Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 一阶导数滤波器_Matlab - Fatal编程技术网

Matlab 一阶导数滤波器

Matlab 一阶导数滤波器,matlab,Matlab,我最近的任务是在自己的图像上使用一阶导数过滤器。讲师说,我应该首先在行上固定y值和预制件f(x+1)-f(x),然后在列上固定新的“x”值和预制件f(y+1)-f(y) 注意:我被要求手动执行此任务,而不是使用filter2()或任何其他编程函数,因此请不要建议我使用filter2()或类似函数。谢谢 我试着调出所有的像素,然后通过 fid = fopen('image.raw') myimage = fread(fid,[512 683], '*int8') fclose(fid) imsz

我最近的任务是在自己的图像上使用一阶导数过滤器。讲师说,我应该首先在行上固定y值和预制件f(x+1)-f(x),然后在列上固定新的“x”值和预制件f(y+1)-f(y)

注意:我被要求手动执行此任务,而不是使用filter2()或任何其他编程函数,因此请不要建议我使用filter2()或类似函数。谢谢

我试着调出所有的像素,然后通过

fid = fopen('image.raw')
myimage = fread(fid,[512 683], '*int8')
fclose(fid)

imsz = size(myimage)

x = imsz(1)

for I = 1:512
for J = 1:683

X(I) - X(I-1) = XX

但它似乎不起作用,我也不太明白为什么。如果你能帮助我,或者给我指出正确的方向,我将非常感激

如果过滤后的图像是
div
,则

for Y = 1:682
    for X = 1:511
        div(X, Y) = myimage(X + 1, Y + 1) - myimage(X,Y);
    end
end

记住,最后一行和最后一列不会被过滤

如果过滤后的图像是
div
,则

for Y = 1:682
    for X = 1:511
        div(X, Y) = myimage(X + 1, Y + 1) - myimage(X,Y);
    end
end

记住,最后一行和最后一列不会被过滤

首先,您的代码语法不正确:

  • 您的任何循环都没有语句,而且,这里甚至不需要循环
  • 您似乎将图像读入变量
    myimage
    ,但在尝试计算导数时使用了未定义的变量
    X
  • 赋值语句的顺序相反。要分配给的变量应写在赋值的左侧部分
  • 我强烈建议您在执行更复杂的任务之前,阅读在线教程并熟悉MATLAB基础知识

    关于你的具体问题:

    MATLAB鼓励向量化操作,即一次对整个阵列(向量或矩阵)进行操作。要减去一个数组中的相邻值,基本上要做的是减去两个数组,相对于彼此移动一个元素。对于一维阵列,这将在MATLAB中转换为:

    a(2:end) - a(1:end-1)
    
    其中
    a
    是您的数组。
    end
    关键字指定数组中的最后一个索引

    要计算图像(二维矩阵)的导数,需要确定要沿哪个轴执行该操作。要沿y轴近似导数,请执行以下操作:

    X(2:end, :) - X(1:end-1, :)
    
    X(:, 2:end) - X(:, 1:end-1)
    
    您可以验证这是否提供与
    diff(X,1)
    相同的结果(或者只需
    diff(X)
    )。要计算沿x轴的近似导数(相当于
    diff(x,2)
    ),请执行以下操作:

    X(2:end, :) - X(1:end-1, :)
    
    X(:, 2:end) - X(:, 1:end-1)
    

    冒号(
    )与将
    1:end
    写入对应维度的数组下标相同。

    首先,您的代码在语法上不正确:

  • 您的任何循环都没有语句,而且,这里甚至不需要循环
  • 您似乎将图像读入变量
    myimage
    ,但在尝试计算导数时使用了未定义的变量
    X
  • 赋值语句的顺序相反。要分配给的变量应写在赋值的左侧部分
  • 我强烈建议您在执行更复杂的任务之前,阅读在线教程并熟悉MATLAB基础知识

    关于你的具体问题:

    MATLAB鼓励向量化操作,即一次对整个阵列(向量或矩阵)进行操作。要减去一个数组中的相邻值,基本上要做的是减去两个数组,相对于彼此移动一个元素。对于一维阵列,这将在MATLAB中转换为:

    a(2:end) - a(1:end-1)
    
    其中
    a
    是您的数组。
    end
    关键字指定数组中的最后一个索引

    要计算图像(二维矩阵)的导数,需要确定要沿哪个轴执行该操作。要沿y轴近似导数,请执行以下操作:

    X(2:end, :) - X(1:end-1, :)
    
    X(:, 2:end) - X(:, 1:end-1)
    
    您可以验证这是否提供与
    diff(X,1)
    相同的结果(或者只需
    diff(X)
    )。要计算沿x轴的近似导数(相当于
    diff(x,2)
    ),请执行以下操作:

    X(2:end, :) - X(1:end-1, :)
    
    X(:, 2:end) - X(:, 1:end-1)
    

    冒号(
    )与将
    1:end
    作为相应维度的数组下标一样。

    我手头没有Matlba,老实说,我不会写你的代码!因此,有几点建议:您必须在左侧而不是右侧编写要分配操作的变量。你必须写X[i,:]来索引一行,或者写X[:,j]来索引一列。除了评论/回答中所说的,我建议不要硬连接循环的上限。而是将该值赋给一个变量,或调用要循环的向量/矩阵上的
    size
    。这避免了在处理不同大小的数组时出现错误。我手头没有Matlba,我不会编写您的代码!因此,有几点建议:您必须在左侧而不是右侧编写要分配操作的变量。你必须写X[i,:]来索引一行,或者写X[:,j]来索引一列。除了评论/回答中所说的,我建议不要硬连接循环的上限。而是将该值赋给一个变量,或调用要循环的向量/矩阵上的
    size
    。这避免了在处理不同大小的数组时出现错误。对于语法问题,很抱歉,我匆忙输入了代码,忘记了几行描述X的内容。感谢您的帮助,非常感谢helpful@user2475404“欲速则不达……”@user2475404:下次请保持礼貌,仔细复习你的问题。你可能不会总是像今天这样幸运。您可能也会发现有帮助。很抱歉语法问题,我匆忙输入了代码,忘记了几行描述X的内容。谢谢您的帮助,非常感谢helpful@user2475404“欲速则不达……”@user2475404:下次请保持礼貌,仔细复习你的问题。你可能不会总是像今天这样幸运。你可以