
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
「ラベリング」は画像のサイズを縦横ともに2画素増やして、画像を囲むように外側1画素を「境界」で塗りつぶすと、例外処理が不要になるので、ちょっと幸せになれる(かも)。
ラベリングの具体的な方法は、Webを検索するなり、初級の画像処理の教科書を見れば、たくさん見つかるでしょう。
No.2
- 回答日時:
コード書く気はありませんし、検証もしていませんが…
とりあえず……
基準点を決める。
(0,0)ですかね。
基準点が"■"でなければ移動して新たに基準点を策定し直し。
"■"だったら上下左右の隣接する箇所に"■"があるか判定。
連接箇所に"■"が1つもなければ、塊になっていないぼっちの"■"としてカウントして基準点走査に。
隣接箇所にあったらそちらの隣接部分を基準点その2として、その隣接領域に"■"があるか判定。
って感じで走査…ですかねぇ……。
ん~……int型の二次元配列を用意する。
外周分も含めて[10][10]。
全部-1(未調査領域フラグ)で初期化して、外周部分を0("□"相当)に設定。
[1][1]からスタートで取りあえず1を設定。
先ほどの処理で"□"だったら対応する箇所に0を、"■"だったら基準点その2に移動して該当箇所に1を設定。
隣接区域を調べる際に1だったら調査済み。として調査を続行して、塊の周りにある"□"が確定したら次の基準点(-1)の箇所へ。
新たに"■"が見つかったら次は2をおいて同様の処理で固まりを……
と繰り返していく感じでしょうかねぇ。
マインスイーパーなんかで安全地帯を探すアルゴリズムみたいなモンでしょうか?
# 経路探索とは違うよなぁ…。
# ゲームなんかでユニットの移動範囲を検索するアルゴリズムに似て…はいるかなぁ?
# 移動距離無限大、進入禁止領域あり。みたいな。
最終的に…
0000000000
0110011110
0011110000
0000000000
0200333330
0200333330
0220303030
0020003030
0020333330
0000000000
って感じになりますかね。(崩れていたら等幅フォントで見てくださいな)
で、配列内の最大値が「■の塊の個数」ということに。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
多変数関数の最小値を求めるプ...
-
C♯で電卓を作成しています。演...
-
ハノイの塔のさいきアルゴリズ...
-
Officeのラスタ画像の拡大縮小...
-
VB2010にて分数表示(約...
-
ドロネー三角形のプログラム
-
マージソートの比較回数の計算...
-
書籍のソースコードを別言語に...
-
SNSをやらない理由ってなんです...
-
C言語初心者の質問失礼いたしま...
-
バケット法による文字列ソート
-
CRC-CCITT16の算出法
-
黒の塊の数え方
-
六曜の自動計算について
おすすめ情報