続き
エッジ処理あとの画像で物体検出をしようと思う。待て待て焦るんじゃない。
たくさんネット記事が出てくるので、何となくできそうな気はするけど
ちょっとここで立ち止まって、画像をちゃんと確認したい。
エッジ処理後の画素値
早速画素値を見てみよう。
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軸方向に一つずらして計算する方法を考えてみました。ちょっと文字では言いづらいので頑張って残しますね。
🌾本来は255か0かですが、簡易的に1と0にしています。
元の画素値行列がこれだったとします。
物体ってどこのことを言うんだろうって考えた時に、こういう検出ができたらいいのでは?と思いました。
つまり、一番左の列を基準として、右のお隣に増えてるかな、減ってるかなって言うのがこの四角の始点・終点でありそれをもとに一つのグループを作っていけば良いのかなと。
よって、この行列だと、以下の二つの行列を先に作ります。
行列1 左にゼロをパディングした行列
そして、行列1ー行列2をすると、一番左を基準として右のお隣さんとの比較ができますね。
それで、一番左の列と右の列を無視すると以下のような行列ができますね。
ちなみに、元の行列の左から二番目以降にこの値が出ている点を取り出してみると
こんな感じになって、なんか良くない?(語彙力)
ここからこのエッジから周りを探索して、同じグループをグルーピングすればいいじゃん。
と言うことで、こんなコードを書いてみました。
#物体検出処理
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の点プロットでもしてみようかなと思います。
逆ですね。xとyが逆ですね、見事に、どっかでミスってますねーこれは。
さてさて、妊婦健診もあるし、ご飯を作るので、もうそろそろやめます。笑