2014-11-22 256 views
0
I=imread('X.jpg'); 
[a b]=size(I); 
figure;imshow(I); 
j=rgb2ycbcr(I); 
figure; 
imshow(j); 
ca=mat2cell(j,8*ones(1,size(j,1)/8),8*ones(1,size(j,2)/8),3); 
p=1; 

for c=1:size(ca,1) 
    for r=1:size(ca,2) 
    subplot(8,8,p); 
    imshow(ca{c,r}); 
    p=p+1; 
    end 
    end 

我收到以下錯誤: 索引超過子圖的數量。 有什麼想法?如何將圖像分解爲8 x 8像素塊?

+0

by'8x8' blocks你是指'8x8'像素還是將圖像分成8x8格? – 2014-11-22 06:52:08

+0

我的意思是8×8像素塊 – matlabuser 2014-11-22 06:53:59

+0

對不起,所以每個塊有64(= 8x8)像素? – 2014-11-22 06:55:01

回答

1

之所以會出現這種情況,是因爲在繪圖時您有更多的圖像塊顯示比您有副圖空間。您for循環代碼更改爲這個:

p = 1; 
figure; 
for c=1:size(ca,1) 
    for r=1:size(ca,2) 
     subplot(size(ca,1),size(ca,2),p); %// Change 
     imshow(ca{c,r}); 
     p=p+1; 
    end 
end 

這樣,你將有儘可能多的次要情節的空間畫出你有像素塊顯現。

+0

但這個數字並沒有顯示任何東西;它是空白的 – matlabuser 2014-11-22 07:01:50

+0

這是因爲你需要產生一個新的數字。嘗試在'for'循環之前執行'figure;'然後重試。 – rayryeng 2014-11-22 07:02:23

+0

我在循環之前做了2個數字,它仍然是空的 – matlabuser 2014-11-22 07:09:23