2012-03-29 24 views
0

我新在MATLAB我試圖定義一個函數,我不斷收到此錯誤輸入參數「IP」是不確定的錯誤

「輸入參數‘IP’是不確定的。

在==錯誤>在2 size_ip edge_mapping =尺寸(IP(:,:,1));「

這裏是我的代碼

function[op1,op2,op3] = edge_mapping(ip) 
size_ip = size(ip(:,:,1)); 
s=size_ip(1); 
op1= cat(3,zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s)); 
op2= cat(3,zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s)); 
op3= cat(3,zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s),zeros(s)); 
for i = 1 : 10 
    op1(:,:,i)=edge(ip(:,:,i),'sobel'); 
    op2(:,:,i)=edge(ip(:,:,i),'prewitt'); 
    op3(:,:,i)=edge(ip(:,:,i),'canny'); 
end 
+0

有沒有一個原因讓你重複連接10次零而不是像'零(s * 10,s)'這樣的東西?同樣,你將'op1,op2,op3'初始化爲同一個矩陣 - 爲什麼重複定義三次?定義'op1'然後複製,'op2 = op1; op3 = op1'。 – 2012-03-29 03:35:41

回答

1
function [op1, op2, op3] = edge_mapping(ip) 
op1 = zeros(size(ip)); 
op2 = zeros(size(ip)); 
op3 = zeros(size(ip)); 
for i = 1 : size(ip, 3) 
    op1(:,:,i)=edge(ip(:,:,i),'sobel'); 
    op2(:,:,i)=edge(ip(:,:,i),'prewitt'); 
    op3(:,:,i)=edge(ip(:,:,i),'canny'); 
end 
return 

但我認爲這是最好編寫一個簡單的函數:

function op = edge_mapping(ip, edge_mode) 
op = zeros(size(ip)); 
for i = 1 : size(ip, 3) 
    op(:,:,i)=edge(ip(:,:,i), edge_mode); 
end 
return 

然後調用它:

op_sobel = edge_mapping(ip, 'sobel'); 
op_prewitt = edge_mapping(ip, 'prewitt'); 
op_canny = edge_mapping(ip, 'canny'); 
0

該代碼是一個函數。它必須保存爲m文件,並從MATLAB命令行腳本或者其他的功能

[op1,op2,op3] = edge_mapping(ip); 

其中的參數IP,OP1,OP2,OP3以及可以有不同的名稱來運行。

請確保您在function關鍵字後有空格。

爲了避免這種錯誤,你可以,如果它是不確定的分配輸入參數的默認值(而不是在函數的範圍存在):

if ~exist(ip, 'var') 
    ip = []; %# or other default value 
end 
相關問題