2011-12-05 9 views
1

イメージデータはuint8配列でどのように保存されますか?矩形の代わりに、わかりにくい円形のイメージがあるとします。そのため、円を超えるピクセルデータはありません。一番上のピクセル位置についてはどうすればいいですか?一番下の? Etc ...そして、この画像は円である必要はありません。それは、不明瞭で非幾何学的なものかもしれません。matlab image uint8最左/上/下/右ピクセル位置を見つける配列

+0

あなたがより明確にあなたの画像の境界を定義する必要があります。 と仮定すると、欠落しているピクセルがあり、ここで、トップ/ボトム/左/右の座標ゼロです。いくつかの式に従っていますか? – Beginner

+0

@Beginnerいいえ、残念ながら完全にランダムです。私は、通常の画像で最も顕著なオブジェクトを切り抜く顕著性マップを使用しています。従って、この切り取られた画像は、想像できる任意の形状を有することができる。 – mugetsu

+0

もっと一般的な回答については、[この質問](http://stackoverflow.com/a/16985818/376454)を参照してください。 – Wok

答えて

8

画像がロードされる列に、そのようなすべての値v(c(i):(c(i+1)-1))が属する列cの先頭のリスト行x列x RGBの配列に変換します。

[top_col, top_row]= find(sum(I,3)', 1); 
[bottom_col, bottom_row]= find(sum(I,3)', 1, 'last'); 
[left_row, left_col]= find(sum(I,3), 1); 
[right_row, right_col]= find(sum(I,3), 1, 'last'); 
+0

私はまだこのコードラインがどのように機能するのか分かりません。 – WantIt

+0

'find(x、1)'は、ラスタスキャン後の最初の非ゼロの座標を返します。 – cyborg

+0

どのように同じですか?私は彼らが同じでなければならないと思います。 [left_row、left_col] = find(sum(I、3)、1); [right_row、right_col] =検索(sum(I、3)、1、 'last'); および [top_col、top_row] = find(sum(I、3) '、1); [bottom_col、bottom_row] =検索(sum(I、3) '、1、' last '); –

1

sparseマトリックスを使用して画像を保存する必要があります。 ピクセルは必要な場所にのみ保存されます。

スパース行列は、そのような記憶されている:

  • 値のリスト。 v
  • i
  • v(j)の行であるように、行インデックスrのリストr(j)
+0

ゼロ以外のピクセルの割合が高いため、フル・マトリックスよりも多くのスペースを使用する可能性があります。 – cyborg

+0

これは「あいまいな」イメージを持つコストです。 – Oli

+0

質問を変更しましたか? – Oli

関連する問題