2016-03-16 87 views
1

我試圖創建一個圖像調整大小的代碼,使用C做Matlab中的imresize.m。我堅持在imresize.m中調用imresizemex的行。看來,imresizemex是一個只能在Matlab中調用的編譯好的機器代碼(我在Matlab專用文件夾中發現它爲imresizemex.mexw64文件,沒有可用的源代碼)。我也嘗試在C中調用它,但失敗了。有誰知道在哪裏可以找到imresizemex的源代碼?非常感謝!imresizemex在Matlab中做了什麼imresize函數?

+1

這是一個編譯好的內部函數,源代碼很可能存儲在The MathWorks中,祝您好運。 – excaza

+0

@excaza謝謝!我在MathWorks上進行了檢查。有些人有類似的問題,但沒有答案。 :( –

+0

內置函數中有很多「隱藏」代碼。否則,MATLAB是開源的...... :) – Adiel

回答

1

我想我想通了^^。它執行三次卷積插值的加權乘法和求和部分。這是我的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); 
相關問題