軒仔 發問時間: 電腦與網際網路程式設計 · 1 0 年前

MATLAB程式問題

x = imread('newborn.tif');

height=size(x,1);

width=size(x,2);

y=uint8(zeros(height,width));

z=zeros(height+4,width+4);

z(2:height+2,2:width+2)=x;

for i=2:height+2,

for j=2:width+2,

if z(i,j)<128

y(i-1,j-1)=0;

e=z(i,j);

else

y(i-1,j-1)=255;

e=z(i,j)-255;

end

z(i,j+2)=z(i,j+2)+7*e/48

z(i,j+3)=z(i,j+3)+5*e/48

z(i+1,j-1)=z(i+1,j-1)+3*e/48

z(i+1,j)=z(i+1,j)+5*e/48

z(i+1,j+1)=z(i+1,j+1)+7*e/48

z(i+1,j+2)=z(i+1,j+2)+5*e/48

z(i+1,j+3)=z(i+1,j+3)+3*e/48

z(i+2,j-1)=z(i+2,j-1)+1*e/48

z(i+2,j)=z(i+2,j)+3*e/48

z(i+2,j+1)=z(i+2,j+1)+5*e/48

z(i+2,j+2)=z(i+2,j+2)+3*e/48

z(i+2,j+3)=z(i+2,j+3)+1*e/48

end

end

以上這段程式碼!我不知道錯在哪邊

然後執行的時候他說

??? Subscripted assignment dimension mismatch.

想問我是錯在哪邊

還有這段程式是在說明啥麼

已更新項目:

好像是錯在那邊沒錯!!

不過我改了以後

RUN了

卻好像變成無窮回圈!!

1 個解答

評分
  • Meitzu
    Lv 5
    1 0 年前
    最佳解答

    錯在

    z(2:height+2,2:width+2)=x;

    for i=2:height+2,

    for j=2:width+2,

    把height+2或width+2都改成height+1與width+1應該就可以run。你的error的產生原因是x是一個height*width的矩陣,而你寫的從2到width+2,總共有width+1個數;從2到height+2總共有height+1個數,一個height*width的矩陣x沒辦法放進(height+1)*(width+1)的新矩陣裡,這是error訊息產生的原因。

    執行完你應該有y變數和修改過的z變數,y的產生是把圖做成全黑全白二值化,z的產生大概是利用原圖和這個二值化的圖,用不同的比例加權之後,產生的結果。整個程式大概是把圖清晰化求邊緣。

    2007-11-16 02:12:00 補充:

    也許迴圈還在跑只是比較慢,可以隨時按下Ctrl-C中止,輸入whos看看有沒有一些已經跑出來的值,或是剛開始選用一張小圖(例如16x16)來跑跑看。

還有問題?馬上發問,尋求解答。