5

我有一个histShape.m用函数调用的文件histShape,还有一些其他函数。

代码的一般视图是:

%
function [outputImage] = histShape(srcimg, destimg)

    PIXELS = 255 + 1;

     ....
     ....
end



%
function [outputImage] = normalizeAndAccumulate(inputImage)

   PIXELS = 255 + 1;

....
....

end

%
function [pixels] = getNormalizedHistogram(histogram , inputImage)


   PIXELS = 255 + 1;

  ....
  ....

end

我可以使用global x y z; ,但我正在寻找一种不同的方式。

我想将变量声明PIXELS为全局变量,我该怎么做?

问候

4

3 回答 3

10

您可以使用关键字访问 MATLAB 函数内的全局变量global

function my_super_function(my_super_input)
    global globalvar;

    % ... use globalvar
end

您通常会使用相同的关键字在函数外部的脚本中声明全局变量:

% My super script
global globalvar;
globalvar = 'I am awesome because I am global';
my_super_function(a_nonglobal_input);

然而,这并不是绝对必要的。只要全局变量的名称在函数之间保持一致,您就可以通过global globalvar;在您编写的任何函数中简单地定义来共享相同的变量。

您需要做的就是global PIXELS;在每个函数的开头定义(在您为其赋值之前)。

请参阅此处的官方文档。

于 2012-11-14T05:37:44.887 回答
4

通常不希望使用全局变量的替代方法是将您的 PIXELS 变量传递给每个函数。如果你有很多,那么你可以制作一个结构来保存它们。

%
function [outputImage] = histShape(srcimg, destimg, PIXELS)

     ....
     ....
end



%
function [outputImage] = normalizeAndAccumulate(inputImage, PIXELS)

....
....

end

%
function [pixels] = getNormalizedHistogram(histogram , inputImage, PIXELS)

  ....
  ....

end

或使用结构

    %In the main script calling the functions
    options.Pixels = 255 + 1

    function [outputImage] = histShape(srcimg, destimg, options)

         PIXELS = options.Pixels;
         ....
         ....
    end
    %etc...
于 2012-11-14T07:43:12.533 回答
2

如果在问题中使用全局变量的唯一原因与发布的代码有关,那么最好的解决方案是使用嵌套函数。您所要做的就是将end示例的第一个移动到文件的最底部,然后您就完成了。

function [outputImage] = histShape(srcimg, destimg)
 PIXELS = 255 + 1;

function [outputImage] = normalizeAndAccumulate(inputImage)
   PIXELS = 255 + 1;
end

function [pixels] = getNormalizedHistogram(histogram , inputImage)
   PIXELS = 255 + 1;
end
end

如果可以避免的话,永远不要使用全局变量。

于 2017-01-29T07:39:24.207 回答