通过函数将未定义长度的矩阵放置

  • 本文关键字:函数 未定义 matlab
  • 更新时间 :
  • 英文 :


为了进行练习,我必须手动使MATLAB过滤器像imshow一样。我制作了以下公式:

if(picture2<w)
    picture3 = (picture2-b)*heaviside((picture2-b)/w))*heaviside(1-(picture2/w));
else
    picture3 = 1;
end

picture2是某个像素的值(在这种情况下为360x331的矩阵), b是应为黑色的最低值,而 w是我希望发生的区域的宽度。picture3将是带有更改灰度的新矩阵。

如果我手动将值输入此公式,我会收到正确的值,但是我无法将整个矩阵推向公式,并获得具有更改值的完整新矩阵。有没有办法轻松执行此操作?

分析

matlab/八度为您要做的事情提供矢量化表达。

解决方案

以下代码应执行您的意图。

% Create an image with all 1 and same size as input
picture3 = ones(size(picture2));
% find pixels that are below w
ltw =  picture2<w;
% Process all pixels <w
picture3(ltw) = (picture2(ltw)-b) .* heaviside((picture2(ltw)-b) ./ w)) .* heaviside(1-(picture2(ltw) ./ w));

解释

一个技巧是创建一个 logical矩阵ltw,其中包含1个或为每个像素符合条件>w。然后,使用逻辑矩阵ltw来解决与您的病情匹配的所有像素。

另一个技巧是使用元素明智的乘法和 ./和 CC_11的划分。如果您使用*操作员乘以两个矩阵/数组,则是数学矩阵乘法。如果应用.*操作员,内部环将按元素处理数组元素。