【问题标题】:What does imresizemex do in Matlab imresize function?imresizemex 在 Matlab 的 imresize 函数中做了什么?
【发布时间】:2016-07-03 00:32:09
【问题描述】:

我试图使用 C 创建一个图像调整大小代码,以完全执行 Matlab 中的 imresize.m 所做的事情。我坚持在 imresize.m 中调用 imresizemex。似乎 imresizemex 是编译后的机器代码,只能在 Matlab 中调用(我在 Matlab 私人文件夹中发现它是 imresizemex.mexw64 文件,没有可用的源代码)。我也尝试在 C 中调用它,但失败了。有谁知道在哪里可以找到 imresizemex 的源代码?非常感谢!

【问题讨论】:

  • 这是一个编译的内部函数,源代码很可能存储在 The MathWorks,祝你好运。
  • @excaza 谢谢!我确实检查了 MathWorks。有些人有类似的问题,但没有答案。 :(
  • 内置函数中有很多“隐藏”代码。否则 MATLAB 是开源的...... :)

标签: matlab


【解决方案1】:

我想我想通了^ ^。它执行三次卷积插值的加权乘法和求和部分。这是我替换 imresizemex 的 Matlab 代码。虽然慢了将近 6 秒,但它产生的结果完全相同。

function outimg=reducesize(inimg, weights,indices,dim)

% reduce first dimension 
reduce1=zeros(dim(1),size(inimg,2));
weight1=weights{1};
index1=indices{1};
for i=1:size(inimg,2)
    for j=1:dim(1)
        w11=weight1(j,:);
        ind11=index1(j,:);
        B=double(inimg(ind11,i)); 
        v=w11.*B';
        reduce1(j,i)=sum(v);
    end
end

% reduce second dimension 
reduce2=zeros(dim(1),dim(2));
weight2=weights{2};
index2=indices{2};
for i=1:dim(1)
    for j=1:dim(2)
        w22=weight2(j,:);
        ind22=index2(j,:);
        B=reduce1(i,ind22);
        v=w22.*B;
        reduce2(i,j)=sum(v);
    end
end

outimg=round(reduce2);

【讨论】:

  • 这是一个非常有用的答案。两个 cmets 可帮助您改进答案。与 imresizemex 相比,您的函数具有不同的语法。也许您可以添加一些文档?我的第二条评论是,我没有使用 imresize.m 文档中的 rice.png 示例获得二进制匹配,当我尝试将采样率降低 4 倍时,我得到了一个错误(这很好由我)。这两个 cmets 均基于 R2016b。感谢您分享您的解决方案!
猜你喜欢
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2020-11-04
相关资源
最近更新 更多