查找和/或调用内置MATLAB MEX文件
我正在阅读一些MATLAB源代码,以便将MATLAB的查找和/或调用内置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>>
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代码。有时可以使用Matlabcoder
/codegen
提取某些代码的版本,但这不是一个方便的过程。MathWorks也可能会根据请求提供某些文件,但我不确定。MATLAB工具箱使用的mex文件通常是预编译和关闭的,但有时可以使用另一个.m文件。此外,如果您有Matlab编码器产品,它包含许多函数的可选.m文件,尽管它们是用于转换为C代码的。我注意到,imhist
由Coder支持,但有一些限制()。MATLAB Coder是一个非常专业的产品(而且价格昂贵),但有时它令人惊讶。我希望我能接受这两个答案。实际上,我扔了一枚硬币。(而且@Tony比你更需要这个代表。)为什么不在Python中使用OpenCV呢,比如说?@horchler是的,所以我正在努力。我的计划是翻译MATLAB,然后将我的翻译与OpenCV
和/或skimage
进行比较。一般来说,MATLAB中的图像处理与这两个python选项中的图像处理似乎有许多细微的差别。(我需要复制MATLAB版本。)是的,如果你看上面,我实际上在接受答案下的评论中发布了这个链接。