0
0

More than 1 year has passed since last update.

【文字検出_備忘録】OpenCV X Python エッジ処理画像における物体検出

Posted at

続き

エッジ処理あとの画像で物体検出をしようと思う。待て待て焦るんじゃない。
たくさんネット記事が出てくるので、何となくできそうな気はするけど
ちょっとここで立ち止まって、画像をちゃんと確認したい。

エッジ処理後の画素値

早速画素値を見てみよう。

y_num[0] x_num[0]:255
y_num[0] x_num[1]:255
y_num[0] x_num[2]:255
y_num[0] x_num[3]:255
...
y_num[186] x_num[116]:255
y_num[186] x_num[117]:0
y_num[186] x_num[118]:0
y_num[186] x_num[119]:0
y_num[186] x_num[120]:0
...

ちゃんと、255か0になってますね。この255->0に落ちる点が特異点な気がするなー。
なんかそういうのできないかなーと思って。この2次元行列をX軸方向に一つずらして計算する方法を考えてみました。ちょっと文字では言いづらいので頑張って残しますね。
元行列.png
🌾本来は255か0かですが、簡易的に1と0にしています。
元の画素値行列がこれだったとします。

物体ってどこのことを言うんだろうって考えた時に、こういう検出ができたらいいのでは?と思いました。
元行列.png

つまり、一番左の列を基準として、右のお隣に増えてるかな、減ってるかなって言うのがこの四角の始点・終点でありそれをもとに一つのグループを作っていけば良いのかなと。

よって、この行列だと、以下の二つの行列を先に作ります。
行列1 左にゼロをパディングした行列
左にパディング.png

行列2 右にゼロをパディングした行列
右にぱでイング.png

そして、行列1ー行列2をすると、一番左を基準として右のお隣さんとの比較ができますね。

この場合だと、計算結果がこんな感じかな。
比較結果.png

それで、一番左の列と右の列を無視すると以下のような行列ができますね。

比較結果最終.png

ちなみに、元の行列の左から二番目以降にこの値が出ている点を取り出してみると
元画像比較.png

こんな感じになって、なんか良くない?(語彙力)

ここからこのエッジから周りを探索して、同じグループをグルーピングすればいいじゃん。

と言うことで、こんなコードを書いてみました。

#物体検出処理
y_depth = edges.shape[0]
x_depth = edges.shape[1]

#ゼロパディングを実施した行列をそれぞれ作る
zero_padding = np.zeros((y_depth,1))
edges_zero_padding_right = np.hstack([edges,zero_padding])
edges_zero_padding_left = np.hstack([zero_padding,edges])

#zero_padding同士を比較
edges_compare = edges_zero_padding_right - edges_zero_padding_left

いい感じのファイルができたのでbool行列にでもしておこうかなと思います。

edges_compare_bool = np.copy(edges_compare)
for y_num in range(y_depth):
	for x_num in range(x_depth):
		if (edges_compare[y_num][x_num] == 0):
			edges_compare_bool[y_num][x_num] = False
		else:
			edges_compare_bool[y_num][x_num] = True

さて、ちょっとここまでで、Trueの点プロットでもしてみようかなと思います。

失敗.png

逆ですね。xとyが逆ですね、見事に、どっかでミスってますねーこれは。

さてさて、妊婦健診もあるし、ご飯を作るので、もうそろそろやめます。笑

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0