2015-06-08 45 views
0

請看看這段代碼並幫助我。我正在做一些錯誤的Matlab命令。該代碼給出警告,然後崩潰。錯誤在第二行。Matlab代碼崩潰並給出錯誤:矩陣的連接維度不一致

while ~isDone(videoSource) 
frame = readFrame(videoSource); 
mask = detectObjects(frame,Fgdetector); 
[areas, centroids, bboxes]= step(blobAnalyser,mask); 

% tracing boundires around the detected obbjects 

% BW = im2bw(I, graythresh(I)); 
[B,L] = bwboundaries(mask,'noholes'); 
imshow(label2rgb(L, @jet, [.5 .5 .5])) 
hold on 

for k = 1:length(B) 
boundary = B{k}; 
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2) 
%for star skeleton 
x = boundary(:,2); 
y = boundary(:,1); 
indexes = convhull(x, y); 

hold on; 

% plot(x(indexes), y(indexes), 'm-', 'LineWidth', 2); 
line([x(indexes(k)), centroids], [y(indexes(k)),centroids ], 'Color', 'r', 'LineWidth', 2); 

end 
+0

哪條線路出現錯誤?在該行中檢查您要連接的每個變量的大小。 – Navan

+0

這條線:[(x(索引(k)),質心],[y(索引(k)),質心],'顏色','r','LineWidth',2); – BlueBee

+0

它沒有崩潰。由於用戶錯誤,它正常退出。 –

回答

1

我懷疑的情況是centroids是A N×2陣列或2×N陣列和你試圖連接一個矩陣與一個單一的價值創造另一個矩陣。大小不一致,所以這就是你得到這個錯誤的原因。我不知道centroids是什麼形狀(即如果它是N x 22 x N),因爲detectObjects是你寫的東西,或者是一個存在於我無法訪問的MATLAB後期版本中的函數,所以其中一個應該可以工作。當您使用line時,您需要爲所需行的每個段提供x位置和結尾y位置。

假設第一行/列是x座標和第二行/列是y座標,這樣做:

centroids - N x 2

line(centroids(:,1), centroids(:,2), 'Color', 'r', 'LineWidth', 2); 

centroids - 2 x N

line(centroids(1,:), centroids(2,:), 'Color', 'r', 'LineWidth', 2); 

作爲一個小注,xy變量在line調用看起來像他們是您的形狀凸包的座標。你正試圖將這些與質心結合起來......這沒有任何意義。堅持畫一個或另一個。如果你想畫兩個,然後讓兩個獨立的行調用:

line(centroids(:,1), centroids(:,2), 'Color', 'r', 'LineWidth', 2); 
% or 
% line(centroids(1,:), centroids(2,:), 'Color', 'r', 'LineWidth', 2); 
line(x(indexes), y(indexes), 'Color', 'r', 'LineWidth', 2); 

請勿混用蘋果和橘子一起。

+0

非常感謝您的回覆。我嘗試了您的建議更改,但它沒有解決我的問題。其實我想要得到一個明星形狀的人形簡筆畫。需要從對象的中心,即人類劃出五條線。一個用於頭部,兩個用於手部,兩個用於腿部。如果你知道任何其他方法,請讓我知道。我被困在這一點,我會感謝您的幫助。 – BlueBee

+0

是的,質心是一個Nx2陣列。 – BlueBee

+0

爲什麼它「不能解決你的問題」?你可以解釋嗎?在錯誤出現之前,你能告訴我圖像現在是什麼樣子嗎? – rayryeng

相關問題