2017-04-20 10 views
0

与えられた行列の点の3x3ブロックを、その点をブロックの中心にして構築したいと考えています。あなたが見ることができるようにピクセルの座標が与えられています。

function frmBlock = fetchNeighbors(frame, row, column) 
%Create a 3x3 matrix contains the neighbors of the point(x, y) 
%[n, m] = size(frame); 
frmBlock = zeros(3, 3); 
x = floor(row); 
y = floor(column); 
    frmBlock(1) = frame(x-1, y-1); 
    frmBlock(2) = frame(x, y-1); 
    frmBlock(3) = frame(x+1, y+1); 
    frmBlock(4) = frame(x-1, y); 
    frmBlock(5) = frame(x, y); 
    frmBlock(6) = frame(x+1, y); 
    frmBlock(7) = frame(x-1, y+1); 
    frmBlock(8) = frame(x, y+1); 
    frmBlock(9) = frame(x+1, y-1); 
end 

、私は私が何をしたいのかを0で初期化さ3×3行列を入力して座標(行、列)のすべてのネイバーとその行列を埋めるためです作成:これは私のコードです。私が何らかの理由で隣人を得ることができないなら、私は何もしません(つまり、3x3ブロック内のその位置を0にします)。

私はこのコードを実行すると、私はエラーが言ってしまった:

Error using fetchNeighbors (line 12) Index exceeds matrix dimensions.

誰かが助けることができますか?

+0

RGB形式のカラー画像をお持ちの場合は、 'frmBlock = nan(3,3,3)'が必要です。三次元はRBGベクトルです。 'frmBlock(1,1、:)= frame(x-1、y-1、:)'は1ピクセル分トリックを行う。 – Crowley

+0

いいえ私はカラーイメージがありません。 – SenDjasni

+0

私の質問が更新されます。 – SenDjasni

答えて

3

私はエラーがあなただけの右または左または上または下の要素にアクセスしようとすると、その後、行列frameの境界線上にあるようにrowcolumnを取って、とされているという事実によるものであることを推測しています(あなたがどの境界にいるかによって異なります)、あなたは限界を超えており、これによりエラーが発生します。たとえば、row1に等しい場合、これは、ある時点でframe(0,column)にアクセスしようとしていることを意味します。これは不正です。

マトリックスにアクセスする前にチェックを追加して(ifステートメントを使用して)、境界内にいることを確認できます。

function frmBlock = fetchNeighbors(frame, row, column) 
% Create a 3x3 matrix that contains the neighbors of the point (row,column) 
    [n,m] = size(frame); 
    neighbors_x = max(row-1,1):min(row+1,n); 
    neighbors_y = max(column-1,1):min(column+1,m); 
    frmBlock = zeros(3,3); 
    frmBlock(neighbors_x-row+2,neighbors_y-column+2) = frame(neighbors_x,neighbors_y); 
end 
+0

あなたの答えをありがとう、それは働いた、私は、入力(行、列)が整数ではない場合、最後のものは、それらは実際には、 'round()'関数を使用したが、 '無効なインデックス作成操作 ' – SenDjasni

+0

非整数インデックスの行列にアクセスできません。整数を丸めなければならない場合は、そのエラーは発生しません。もしあなたがそうしたら、あなたのコードを再チェックすることをお勧めします。問題が解決しない場合は、その問題を対象とする新しいStackOverflow質問を開きます。ここにコメントへのリンクをコメントに追加することができます。 – Lior

+0

もう一度@Liorに感謝します。 – SenDjasni

関連する問題