

現在プログラミングで困っています。
そのプログラミングというのは、
『ビットマップ画像(640×480pixel)中に表示された図形の中心を求める』
というプログラムです。
中心を求めたい図形は、以下の特徴を持っています。
・大きさは一定ではない。10×10~20×20pixelの大きさ。
・形はほぼ正方形。厳密に言うと、台形や平行四辺形に近い形。
・輝度は255。
この図形の中心を求めるには、どのようにプログラムを組めば良いのでしょうか。
みなさんのアドバイスをよろしくお願い致します。
また、私はプログラミングについてはほぼ初心者なので、詳しい説明をして頂けると助かります。
お手数なのですが、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
#1 さんの方法では重心は求まりません.
> 1.水平線を引き、したから上に移動する。上下の図形のピクセル数が等しくなったらとめる。
> 2.垂直線を引き、左から右に移動する。左右の図形のピクセル数が等しくなったらとめる。
これらは重心を求めているのではなく,面積を縦横それぞれについて2等分しているだけです.
重心は面積を2等分する点ではなくて,そのまわりの1次モーメントが釣り合う (0になる) 点です.
重心を求める (物理のかぎしっぽ)
http://www12.plala.or.jp/ksp/mechanics/CG/
2次元での一般的な重心 (Xg, Yg) の定義は,
位置 (x, y) の密度を ρ(x, y) とすると,
・質量
M = ∫∫ρ(x, y) * dx * dy
・Xの (つまりY軸まわりの) 1次モーメント
Ix = ∫∫ρ(x, y) * x * dx * dy
・Yの (つまりX軸まわりの) 1次モーメント
Iy = ∫∫ρ(x, y) * y * dx * dy
・重心
Xg = Ix / M
Yg = Iy / M
画像処理でいう「重心」は,密度の代わりに輝度 (画素値) p(x, y) を使うので,
M = Σ{x} Σ{y} p(x, y)
Ix = Σ{x} Σ{y} p(x, y) * x
Iy = Σ{x} Σ{y} p(x, y) * y
質問文中の「輝度は255」というのは,たぶん二値画像で
「輝度は0または255」ということだと思います.
その場合には次のようにすれば無駄な計算をせずに重心が求められます.
M = (輝度=255の画素数)
Ix = Σ{輝度=255の画素} x
Iy = Σ{輝度=255の画素} y
今は時間がないのでこの辺で.
あとは自分で考えるか,他の方の回答を待ってください.
QNo.3233875:濃淡画像の縦方向のゆがみを求めたいのですが・・
http://okwave.jp/qa3233875.html
返信が遅くなってしまい、申し訳ありません。
簡易化したプログラムを作ることにしたのですが、
noocyteさんのアドバイスは非常に参考になりました。
ありがとうございました。
No.1
- 回答日時:
問題を解く前に中心を定義する必要があります。
円や楕円には、中心がありますが、台形や平行四辺形に近い形には、「中心」がありません。
その他には長方形や菱形、平行四辺形のような点対称な図形の重心のことを中心(もしくは対称の中心)とよぶこともあるので、重心を求めることにしましょうか。
1.水平線を引き、したから上に移動する。上下の図形のピクセル数が等しくなったらとめる。
2.垂直線を引き、左から右に移動する。左右の図形のピクセル数が等しくなったらとめる。
3.水平線と垂直線の交点を求め重心点とする。
お答えありがとうございます。
この方法をプログラムとして記述したいのですが、
どのようにプログラムを組んでよいのかが分かりません。
稚拙で大変恐縮なのですが、
プログラムの組み方を簡単で結構なので教えて頂けませんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リピート再生が出来ません
-
VisualStudio2008にこのような...
-
Cプログラミングでハングマンゲ...
-
数学、プログラミング、物理、...
-
MFCとC++/CLIとの比較
-
iPadでプログラミングは可能で...
-
ノートPCについて 大学・専門へ...
-
曲を作るのにプログラミングっ...
-
Access Club について
-
アセンブリ名とは??
-
VBA フォルダ アクセス権限付与
-
C言語、C+、C++、C#の違い
-
HOLONついて教えてください。
-
HTMLとC++で、どんなホームペー...
-
著作権法について
-
仮想ドライブ
-
プログラミング入門
-
Windowsで、システム上同じ言語...
-
Delphiでプログラム中の表示部...
-
スプレッドシートの作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングについて こちら...
-
数学、プログラミング、物理、...
-
アセンブリ名とは??
-
リピート再生が出来ません
-
ノートPCについて 大学・専門へ...
-
Visual Studio Codeについて
-
CSVデータの"(ダブルクォーテ...
-
procってなんですか?
-
VBA フォルダ アクセス権限付与
-
Delphiでxmlファイルを読み込む...
-
PL/Iについて
-
曲を作るのにプログラミングっ...
-
作業工程 SDとMD
-
C言語で何を作りますか?
-
Cで本格的なプログラムを作りたい
-
プログラミングでArduinoのc++...
-
C#でマウスのドラッグで範囲を...
-
プログラミングを学ぼうと思い...
-
ソニーのNeural Network Consol...
-
exeファイルを作ったり改造した...
おすすめ情報