2012-03-29 129 views
-2

我被給定了一組圖像(.png),我應該檢測每個圖像邊緣,然後應用一些圖像處理,但我有一個問題。 首先我一個圖像陣列如下:圖像處理在MATLAB中的錯誤

imgArray = {'image_1.png','image_2.png','image_3.png'} 

然後施加切割木板(索貝爾),使用MATLAB內置函數edge這樣:

for i = 1:3 
     image=imread(imgArray{i}); 
     image = edge(image,'sobel'); 
     imgArray{i} = image; 
end 

基於該prvious代碼和我的理解,該imageArray,現在包含所有3個邊緣圖像。 後來,我需要在代碼的不同位置使用該命令image=imread(imgArray{i});使用邊緣圖像,但它給了我一個錯誤,我不明白爲什麼會發生這種情況?

編輯:

這裏是我得到的錯誤:

Error in ==> ImageCompare at 43 image=imread(imgArray{i}); 
+0

你看到的錯誤是什麼? – 2012-03-29 21:30:57

+0

這就是精確錯誤: 錯誤在==> ImageCompare在43 image = imread(imgArray {i}); – user1111726 2012-03-29 21:32:18

+0

循環中的最後一行重新定義了每個元素'imgArray'。嘗試使用新的變量名稱來存儲生成的邊緣圖像,例如'edgedImage {i} = image;'。 – Azim 2012-03-29 21:34:13

回答

2
imgArray = {'image_1.png','image_2.png','image_3.png'}; 
imgArrayEdged = strrep(imgArray, '.png', '_edged.png'); 
for i = 1 : length(imgArray) 
    image = imread(imgArray{i}); 
    image = edge(image,'sobel'); 
    imwrite(image, imgArrayEdged{i}); 
end 

% later... 

for i = 1 : length(imgArray) 
    if (your_condition) 
     image = imread(imgArray{i}); 
    else 
     image = imread(imgArrayEdged{i}); 
    end 
end 
+0

是的,謝謝你,我想你解決了這個問題,但只是一個問題,我真的不明白代碼的第二行? – user1111726 2012-03-29 22:15:54

+0

這是一種快速創建新文件名的方法imgArrayEdged = {'image_1_edged.png''image_2_edged.png''image_3_edged.png'}將每個「.png」替換爲「_edged.png」 – Serg 2012-03-29 22:29:21

+0

是的,我知道了,非常感謝 – user1111726 2012-03-29 22:39:37

0

imgArray包含文件名作爲字符串。在循環中,您正在讀取圖像文件並用圖像數據替換單元格陣列中的每個字符串。

如果您以後絕對需要文件名字符串,則必須創建第二個變量來保存圖像數據本身。如果您只需要原始圖像,請稍後在代碼中使用imread

在讀取一次imread的圖像文件後,沒有理由再次讀取文件來浪費時間。看起來您並不清楚數據在代碼中移動時的狀態。我建議你使用MATLAB的優秀調試器來逐步檢查變量的類型和內容 - 你會很快看到imread哪裏需要一個文件名是不合適的。