Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

matlab矩陣的問題

假設我有個矩陣是640*480的矩陣

我想要把矩陣中央大約60*60的矩陣值換掉

請問各位大大要怎麼處理比較好

1 Answer

Rating
  • 1 decade ago
    Favorite Answer

    版大 您好:

    比較直覺的方法是 可將矩陣的 列 及 行 方向各一分為 2 , 可得

    到 四個 分佈在四個象限其大小各為 320 * 240 的子矩陣 接著再

    依序將分佈在第一象限 ~ 第四象限子矩陣中 分別將其左下 左

    上 右上 及 右下 四個角落的 30 個元素值更換成您要的值即可

    如下:

    舉例: 試將一大小為 10 * 20 的矩陣 其內之元素自行填值 將其

    中央為 3 * 3 的範為填入 0

    程式碼:

    clc;

    clear all;

    row = 10; % 矩陣列數

    column = 20; % 矩陣行數

    width = 3; % 寬度

    count = 0;

    for i = 1 : row % 矩陣填值 製做出一矩陣

    for j = 1: column

    matrix(i, j) = count + 1;

    count = count + 1;

    end

    end

    for i = ( (row / 2 ) - width + 1 ) : (row / 2) % 將第一象限之子矩陣左下角的元素值填 0

    for j = ( (column / 2) + 1 ) : (column / 2 + width)

    matrix(i, j) = 0;

    end

    end

    for i = ( (row / 2 ) + 1 ) : (row / 2 + width) % 將第二象限之子矩陣左上角的元素值填 0

    for j = ( (column / 2) + 1 ) : (column / 2 + width)

    matrix(i, j) = 0;

    end

    end

    for i = ( (row / 2 ) + 1 ) : (row / 2 + width) % 將第三象限之子矩陣右下角的元素值填 0

    for j = ( (column / 2) - width + 1 ) : (column / 2)

    matrix(i, j) = 0;

    end

    end

    for i = ( (row / 2 ) -width + 1 ) : (row / 2) % 將第四象限之子矩陣右下角的元素值填 0

    for j = ( (column / 2) - width + 1 ) : (column / 2)

    matrix(i, j) = 0;

    end

    end

    matrix % 印出矩陣

    注意: 若所輸入的矩陣的列及行不為偶數 則須視情形以 fix 函數

    (無條件捨去) 或 以 round 函數(四捨五入)取出列及行 而中央矩

    陣的長與寬須視您的需要 變更 width 變數 或 增加另一個 width

    1 變數 使其長與寬 能各自調整

    此程式是較直覺的做法 當然還有其它更好的方式 只是先提供

    個想法給您參考

    2009-07-01 09:19:40 補充:

    您更可以將四個子矩陣合而為一 程式碼可改成如下:

    for i = (row - 2 * width) / 2 + 1 : (row - 2 * width) / 2 + 2 * width % 將矩陣中央值填 0

    for j = (column - 2 * width) / 2 + 1 : (column - 2 * width) / 2 + 2 * width

    matrix(i, j) = 0;

    end

    end

    答案是相同的

Still have questions? Get your answers by asking now.