我试图使用C创建一个图像大小调整代码来完成matlab中的imresize.m。我坚持在imresize.m中调用imresizemex。似乎imresizemex是一个只能在Matlab中调用的编译机器代码(我发现它是一个Matlab私有文件夹中的imresizemex.mexw64文件,没有可用的源代码)。我也尝试用C调用它,但失败了。有谁知道在哪里可以找到imresizemex的源代码?非常感谢!
答案 0 :(得分:3)
我想我弄清楚了^ ^。它执行三次卷积插值的加权乘法和求和部分。这是我的Matlab代码替换imresizemex。虽然慢了近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);