查找和/或调用内置MATLAB MEX文件

时间:2015-05-19 00:19:38

标签: matlab mex

我正在阅读一些MATLAB源代码,以便将MATLAB的imhist翻译成Python。在imhist内,进行以下调用:

y = imhistc(a, n, isScaled, top);  % Call MEX file to do work.

正如评论所暗示的,imhistc来自MEX文件。

我可以毫无问题地打开并运行imhist

EDU>> edit imhist
EDU>> x = [0.1 0.1 0.1; 0.1 0.1 0.1];
EDU>> counts = imhist(x, 64);

但是当我尝试使用imhistc打开edit imhistc时,我会收到提示,

  

文件/home/daniel/imhistc.m不存在。你想创造吗?

当我尝试运行imhistc时,我收到以下错误:

EDU>> y = imhistc(x, 64, 1, 1);
??? Undefined function or method 'imhistc' for input arguments of type 'double'.

因此,imhistc可以使用imhist,但我无法使用。

如何访问imhistc?我想象答案将适用于内置的MEX文件。

3 个答案:

答案 0 :(得分:3)

错误意味着,函数imhistc是一个预编译的mex文件,因此您无法直接访问其源代码。 which imhistc不起作用的原因是imhistc位于名为private的目录中,该目录位于imhist的同一文件夹中。您会注意到,如果您在private文件夹中查看其中还有一个imhistc.m文件,但只有在imhistc的mex版本时才返回错误消息由于某种原因不可用。

这对您转换程序没有帮助,但至少它会让您知道您在遵循该特定代码路径方面遇到了障碍。

答案 1 :(得分:2)

如果您希望查看imhistc中的代码,那么您运气不佳。它是一个私有的mex文件,但它是编译的 C代码。在R2015a中,至少有imhistc的私有文档M文件,但除非缺少同名的mex文件,否则其中的一行错误检查不会运行。如果它有用,帮助(在命令窗口中输入help private/imhistcedit private/imhistc)表示

  

COUNTS = IMHISTC(A,N,ISSCALED,TOP)计算N-bin
  A的直方图如果我们不应该计算,则ISSCALED为1   256-bin直方图使用A中的值。 TOP给出了   最大仓位。

您可以在

找到已编译的文件
[matlabroot '/toolbox/images/images/private/']

您可以尝试查看此文件中的内容,但我不认为您会发现它非常有用:

type([matlabroot '/toolbox/images/images/private/imhistc.' mexext])

答案 2 :(得分:1)

这已经很晚了,但也许未来有人会觉得这很有用。我最近和你做了同样的事情并遇到了同样的问题。我在谷歌代码档案中找到了似乎是imhistc的存档版本。你可以在

找到它

https://code.google.com/p/mirone/source/browse/trunk/mex/imhistc.c?r=1874&spec=svn1874

我编写了一个基于该C代码的简化版本,并且能够得到相同的数字,所以我认为它可能仍然在使用。

干杯