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

查找和/或调用内置MATLAB MEX文件,matlab,mex,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>>

我正在阅读一些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
打开
imhistc
时,我会得到一个提示,提示:

文件/home/daniel/imhistc.m不存在。您想创建它吗

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

EDU>> y = imhistc(x, 64, 1, 1);
??? Undefined function or method 'imhistc' for input arguments of type 'double'.
因此,
imhist
imhist
可用,但对我不可用


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

如果您希望在
imhistc
中查看代码,那就太不走运了。它是一个私有的
mex
文件,但它是编译的C代码。在R2015a中,至少有一个用于
imhistc
的私有文档M文件,但除非缺少同名的
mex
文件,否则该文件中的单行错误检查将不会运行。如果有帮助,则帮助(在命令窗口中键入
help private/imhitc
edit private/imhitc
)指示

计数=历史记录(A、N、ISSCALED、TOP)计算N-bin
如果我们不计算A的直方图,则A的直方图为1 256位柱状图,使用原样中的值。TOP给出的是 最大垃圾箱位置

您可以在以下位置找到编译后的文件:

[matlabroot '/toolbox/images/images/private/']
您可以尝试查看此文件中的内容,但我不认为您会发现它非常有用:

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

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


这并不能帮助您转换程序,但至少它会让您知道您在遵循特定代码路径方面遇到了困难

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

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


干杯

啊,糟糕透了。我在谷歌上搜索了
imhistc
,找到了
C
源代码,但我不确定这是不是MATLAB认可的。(@horchler)在Matlab文件交换()上有许多图像直方图函数,其中包含完整的源代码,可能会有所帮助。在那里搜索
imhist
,你会很有希望找到一个对你有帮助的。@horchler MATLAB MEX文件通常是封闭源代码的,这是真的吗?@dbliss:看起来像是体面的
MEX
代码,即使它有点旧。编译它应该不会太难。我所知道的所有mex函数都是封闭的,尽管它们可能引用参考文献,并且可能基于早期版本的Matlab代码。有时可以使用Matlab
coder
/
codegen
提取某些代码的版本,但这不是一个方便的过程。MathWorks也可能会根据请求提供某些文件,但我不确定。MATLAB工具箱使用的mex文件通常是预编译和关闭的,但有时可以使用另一个.m文件。此外,如果您有Matlab编码器产品,它包含许多函数的可选.m文件,尽管它们是用于转换为C代码的。我注意到,
imhist
由Coder支持,但有一些限制()。MATLAB Coder是一个非常专业的产品(而且价格昂贵),但有时它令人惊讶。我希望我能接受这两个答案。实际上,我扔了一枚硬币。(而且@Tony比你更需要这个代表。)为什么不在Python中使用OpenCV呢,比如说?@horchler是的,所以我正在努力。我的计划是翻译MATLAB,然后将我的翻译与
OpenCV
和/或
skimage
进行比较。一般来说,MATLAB中的图像处理与这两个python选项中的图像处理似乎有许多细微的差别。(我需要复制MATLAB版本。)是的,如果你看上面,我实际上在接受答案下的评论中发布了这个链接。