現在プログラミングで困っています。
そのプログラミングというのは、
『ビットマップ画像(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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- 物理学 下の図についての問題です。 (2)ソレノイドの中心に半径b、巻数Nの微小円形コイルを互いの中心軸がθ 3 2023/05/28 23:11
- JavaScript json形式データのデータ連携について 4 2022/04/05 23:01
- 物理学 図のように、内半径aの中空の円筒が、その中心軸が水平になるように固定されており、その中で、 質量 M 7 2023/02/15 09:23
- 数学 写真の図は中心(a,b)半径rの円とその円周上の(x1,y1)における接線lと円の中心とlを結ぶ任意 4 2023/08/08 16:20
- C言語・C++・C# 画像の画素値を変えるC言語のプログラムで指定された画像の中に白い三角形を右上に表示させるにはどのよう 3 2022/10/30 01:16
- 数学 数学の問題がわかりません。(球の中心の座標を求める問題) 2 2023/02/14 15:52
- その他(学校・勉強) T形抵抗減衰器の減衰量の求め方について 4 2022/06/30 11:30
- Excel(エクセル) エクセルの値を元に図形の色を変えたい 2 2022/05/11 01:37
- C言語・C++・C# プログラミングの問題です。P1(x1,x2)、P2(x2,y2)をニ頂点とする長方形および△P1P2 2 2022/05/09 22:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングを教えたいです...
-
小学1年生の子です。塾に行かせ...
-
IT業界より楽に稼げる業界って...
-
USBカメラからDirectShowを使っ...
-
プログラミングの雑談とかでき...
-
アセンブリ名とは??
-
LeetCodeていうの初めて、
-
push any key で終了する方法?
-
家庭のパソコンで Python の 環...
-
Visual Studio Codeについて
-
procってなんですか?
-
C言語を学ぶうえでの古典的な名...
-
以下のサイトのようなフォーム...
-
プログラムを習得している方へ...
-
1からNの素数を求めるプログラ...
-
義務教育レベルのプログラミン...
-
オススメのプログラミングスク...
-
c言語 関数 変数 引数 と...
-
CSVデータの"(ダブルクォーテ...
-
"化学"反応を予想するソフト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
家庭のパソコンで Python の 環...
-
プログラミングの雑談とかでき...
-
以下のサイトのようなフォーム...
-
LeetCodeていうの初めて、
-
IT業界より楽に稼げる業界って...
-
アセンブリ名とは??
-
プログラミングをやってます。 ...
-
procってなんですか?
-
CSVデータの"(ダブルクォーテ...
-
VBA フォルダ アクセス権限付与
-
GitHubについて
-
実はこれからの時代はプログラ...
-
Try Kotlinで readLine()を使う...
-
【Chapter2】プログラミング教...
-
Visual Studio Codeについて
-
コンピュータのプログラミング...
-
PL/Iについて
-
VBAプログラミング
-
最近小学生、中学生にもプログ...
-
MFCとC++/CLIとの比較
おすすめ情報