第 5 章 量子化誤差ありの図形認識 21
5.2.1 任意の円が任意の画素でとる値を求めるアルゴリズム
中心点座標(x, y)と半径r,目標画素の左下端点座標(x′, y′)を入力としたとき,目標画素 に含まれる図形の面積を計算する.画素は1×1の正方形としているため,目標画素の左上端 点座標は(x′, y′ + 1),右下端点座標は(x′+ 1, y′),右上端点座標は(x′ + 1, y′+ 1)である.
円の中心点と目標画素の位置関係は斜め方向の場合と,水平垂直方向の場合の2つのパター ンが考えられる.全方位を考えると上,下,左,右,右上,右下,左下,左上の8パターンが あるが,本質的には斜め方向か水平垂直方向かの位置関係がわかれば良いため,例えば図5.5 のように右上と右のみ考え,入力を90°,180°,270°だけ回転させて対応させれば良い.
θ
θ
θ θ
θ
0θ
0θ
0θ
0φ
φ
φ φ
θ
θ θ θ
θ θ
θ θ
0θ
0θ
0θ
0θ
0θ
0θ
0φ φ φ φ
φ φ φ
図 5.6: 点と画素の位置関係の場合分け
斜め方向と,水平垂直方向の2パターンは円周が目標画素の上辺,下辺,左辺,右辺のど こに接触しているかにより,更に斜め方向は4つ,水平垂直方向は7つに図5.6のように場合 分けされる.実装においてどの辺に接しているかの判別は中心点座標と半径から,目標画素 の正方形の角の4点のどれを含んでいるかで場合分けすることができる.
中心点および,目標画素と円周が接触する2点(1つだけ4点の場合もある)で作る扇形を 考えたとき,扇形の中心角をφとする.中心角からみて扇の左側半径を斜辺とする直角三角 形を考えたとき,扇形の中心角に隣接する角度をθ,中心角からみて扇の右側半径を斜辺とす る直角三角形を考えたとき,扇形の中心角に隣接する角度をθ′とする.
斜め方向のパターンおよび,水平垂直方向であり扇形の2つの半径が上と右または右と下に 接触するときφ = π2−θ−θ′である.それ以外の水平垂直方向のパターンのときφ=π−θ−θ′ である.
斜め方向のパターンの場合,
画素の上辺に接点があるとき,θ= cos−1(y′+1r−y),
画素の左辺に接点があるとき,θ= sin−1(x′−rx),
画素の右辺が接点があるとき,θ′ = cos−1(x′+1r−x),
画素の下辺が接点があるとき,θ′ = sin−1(y′−ry) である.
水平垂直方向のパターンの場合,
上側の接点が画素の左辺にあるとき,θ = sin−1(x′−rx),
上側の接点が画素の上辺にあるとき,θ = cos−1(y′+1r−y),
上側の接点が画素の右辺にあるとき,θ = cos−1(x′+1r−x),
下側の接点が画素の左辺にあるとき,θ′ = sin−1(x′−rx),
下側の接点が画素の上辺にあるとき,θ′ = cos−1(y′−ry),
下側の接点が画素の右辺にあるとき,θ′ = cos−1(x′+1r−x) である.
以上をふまえると目標画素に含まれる図形部分の面積は表5.1のように計算できる.
表 5.1: 目標画素に含まれる図形の面積を計算する式 位置関係 目標画素に接する辺 目標画素の値を求める式
斜め 上,右 12(φ−sinφ) + 1− 12(1−rsinθ+x′)(1−rsinθ′+y′) 斜め 上,下 12(φ−sinφ) + 12(rsinθ+rcosθ′−2x′)
斜め 左,右 12(φ−sinφ) + 12(rcosθ+rsinθ′−2y′) 斜め 左,下 12(φ−sinφ) + 12(rcosθ−y′)(rcos′−x′) 水平垂直 左,左 12(φ−sinφ)
水平垂直 上,下 12(φ−sinφ) + 12(x+rsinθ′ −x′ +x+rsinθ−x′) 水平垂直 左,下 12(φ−sinφ) + 12(x+rsinθ′+x′)(y′−y+rcosθ) 水平垂直 上,左 12(φ−sinφ) + 12(x+rsinθ−x′)(y′−y+rcosθ′) 水平垂直 上,右 12(φ−sinφ) + 1−12(1−x+rsinθ−x′)(rcosθ−sinθ′) 水平垂直 右,下 12(φ−sinφ) + 1−12(1−x+rsinθ′−x′)(rcosθ′−sinθ) 水平垂直 上,右,右,下 [水平垂直(上, 下)]−[水平垂直(左, 左); x′はx′+ 1と置く]
少し特殊なパターンとして,最後の水平垂直方向(上,右,右,下)の式は,水平垂直方 向(上,下)を求める式で計算した値から,x′をx′+ 1と置いた水平垂直方向(左,左)を 求める式で計算した値を差し引いたものとなる.ただし,それぞれのφ, θ, θ′の求め方が異 なることに注意すること.
φ θ
θ 0
(x, y) (x
0, y
0) (x
0, y
0+ 1)
(x
0+ 1, y
0) (x
0+ 1, y
0+ 1)
θ
θ
θ φ
φ θ 0 φ
θ 0
θ 0
図 5.7: 中心点の含まれる画素中の図形領域の計算