2013-11-20 61 views
0

這是我在C#中的代碼。我正在嘗試在matlab中執行for循環。我能夠發送和接收來自和來自matlab的圖像。現在如何在C#中執行matlab循環?

matlab.Execute("img_bw = im2bw(img_resize)"); 
matlab.Execute("input = imclose(img_bw, strel('disk', space));"); 
matlab.Execute("[labels, num] = bwlabel(input, 8);"); 
matlab.Execute("output = logical(zeros(size(input)));"); 

matlab.Execute("for i = 1:num "); 
matlab.Execute(" [r, c] = find(labels==i)"); 
matlab.Execute(" x = round(mean(c))"); 
matlab.Execute(" y = round(mean(r))"); 
matlab.Execute(" output(y,x) = 1; "); 
matlab.Execute("end;"); 

,如果你看一下後'matlab.Execute聲明( 「輸出=邏輯(零(大小(輸入)));」); ',有一個for循環。

我如何在matlab中成功執行該循環?我正在使用matalb服務器在matalb上執行matlab命令。也就是說,我的電腦上安裝了matlab。

+1

難道你不能將整個循環作爲單個命令傳遞嗎?使用StringBuilder構建整個字符串,然後通過Execute()方法發送一次。 – Jensen

回答

1

爲了做到這一點,您必須將所有內容作爲一個字符串傳遞,每行用分號分隔。這樣

matlab.Execute("for i = 1:num; [r, c] = find(labels==i); x = round(mean(c));y = round(mean(r)); output(y,x) = 1; end;"); 

由於詹森在他的評論中提到的某些東西,你也可以只串聯的代碼行成一個字符串,然後傳遞到matlab.Execute(codeString)命令。