我正在阅读一些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文件。
答案 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/imhistc
或edit 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代码的简化版本,并且能够得到相同的数字,所以我认为它可能仍然在使用。
干杯