2020.09.17

国勢調査

数日前、区長(町内会長)さんが、国勢調査の調査票を持ってきたので、今日、インターネットで行った。以前は、もっと回答に時間がかかっていたと思うが、数分で終わった。

Blog200917a

| | コメント (0)

2020.09.03

親父の死去から6か月目

今日で、親父が亡くなってから6か月目、半年が経つ。早いような、長かったような。でも、まだ僕は立ち止まったまま。コロナ禍では、致し方ないが・・・。

今日は、午後、久しぶりに、町内の友人Mさんと、西山公園に行ってウォーキングをした。

Blog200903a

西山公園の展望台からの遠景。

Blog200903b

西山動物園のレッサーパンダ。久しぶりに見た。

Blog200903c

西山動物園 では、コロナ対策で、検温と記名が必要だった。

| | コメント (0)

2020.08.23

OpenCVSharpを使ったVB.NETプログラム:その3

今回は、OpenCVSharpを使って、キャリブレーションとテンプレートマッチングの機能のプログラムを作成してみた。



Blog200823a

我が家の廊下の床板

Blog200823b

キャリブレーション

 

 

 

 

 

  1.         Dim pntsrc As New List(Of Point2f), pntdst As New List(Of Point2f)
  2.         '
  3.         pntsrc.Add(New Point2f(17, 477)) : pntsrc.Add(New Point2f(167, 42))
  4.         pntsrc.Add(New Point2f(426, 46)) : pntsrc.Add(New Point2f(575, 482))
  5.         pntdst.Add(New Point2f(0, 0)) : pntdst.Add(New Point2f(0, 500))
  6.         pntdst.Add(New Point2f(500, 500)) : pntdst.Add(New Point2f(500, 0))
  7.         '
  8.         Dim matDat As Mat = Cv2.GetPerspectiveTransform(pntsrc, pntdst)
  9.         Dim matSoc As Mat = New Mat("Sample1.png")
  10.         Dim matDst As Mat = matSoc.Clone
  11.         '
  12.         Cv2.WarpPerspective(matSoc, matDst, matDat, matDst.Size())
  13.         '
  14.         PictureBoxIpl1.ImageIpl = matDst
  15.  

Blog200823c

テンプレートマッチングのテンプレート画像

 

 

Blog200823d

テンプレートマッチング

 

 

  1.         Dim matSoc As Mat = New Mat("Sample2.png"), matSGr As Mat = New Mat()
  2.         Dim matTmp As Mat = New Mat("Sample3.png"), matTGr As Mat = New Mat()
  3.         Dim matRst As Mat = New Mat()
  4.         'グレースケール
  5.         Cv2.CvtColor(matSoc, matSGr, ColorConversionCodes.RGB2GRAY)
  6.         Cv2.CvtColor(matTmp, matTGr, ColorConversionCodes.RGB2GRAY)
  7.         '平滑化
  8.         Cv2.Blur(matSGr, matSGr, New Size(5, 5))
  9.         Cv2.Blur(matTGr, matTGr, New Size(5, 5))
  10.         'テンプレートマッチ
  11.         Cv2.MatchTemplate(matSGr, matTGr, matRst, TemplateMatchModes.CCoeffNormed)
  12.         'マッチングが最大/最小となる画素の位置をチェック
  13.         Dim pntMin, pntMax As OpenCvSharp.Point
  14.         Dim dblMin, dblMax As Double
  15.         Cv2.MinMaxLoc(matRst, dblMin, dblMax, pntMin, pntMax)
  16.         If dblMax > 0.9 Then
  17.             Dim rctDat As Rect = New Rect(pntMax.X, pntMax.Y, matTmp.Width, matTmp.Height)
  18.             Cv2.Rectangle(matSoc, rctDat, New OpenCvSharp.Scalar(0, 0, 255), 5)
  19.             PictureBoxIpl1.ImageIpl = matSoc
  20.         Else
  21.             PictureBoxIpl1.ImageIpl = matSGr
  22.         End If
  23.  

 

Blog200823e

テンプレートマッチング(複数)

マッチした画像を次々と塗りつぶすという方法もあるようだが、そうではなく一度のマッチングで抽出。

 

 

  1.        Dim matSoc As Mat = New Mat("Sample4.png"), matSGr As Mat = New Mat()
  2.         Dim matTmp As Mat = New Mat("Sample5.png"), matTGr As Mat = New Mat()
  3.  
  4.         Dim matRst As Mat = New Mat()
  5.         'グレースケール
  6.         Cv2.CvtColor(matSoc, matSGr, ColorConversionCodes.RGB2GRAY)
  7.         Cv2.CvtColor(matTmp, matTGr, ColorConversionCodes.RGB2GRAY)
  8.         Cv2.Threshold(matSGr, matSGr, 200, 255, ThresholdTypes.Binary)
  9.         Cv2.Threshold(matTGr, matTGr, 200, 255, ThresholdTypes.Binary)
  10.         Cv2.MatchTemplate(matSGr, matTGr, matRst, TemplateMatchModes.CCoeffNormed)
  11.         '
  12.         Dim LstMaPnt As New List(Of Point)()
  13.         Dim LstMaCnt As New List(Of Integer)()
  14.         For Ip As Integer = 0 To matRst.Rows
  15.             For Jp As Integer = 0 To matRst.Cols
  16.                 Dim sngDat As Single = matRst.At(Of Single)(Ip, Jp)
  17.                 If sngDat > 0.95 And sngDat < 9.9 Then
  18.                     Dim Mp As Integer = -1
  19.                     For Kp As Integer = 0 To LstMaPnt.Count - 1
  20.                         If LstMaPnt(Kp).X <= Jp And LstMaPnt(Kp).X > Jp - 10 Then
  21.                             If LstMaPnt(Kp).Y <= Ip And LstMaPnt(Kp).Y > Ip - 10 Then
  22.                                 Mp = Kp : Exit For
  23.                             End If
  24.                         End If
  25.                     Next Kp
  26.                     If Mp = -1 Then
  27.                         LstMaPnt.Add(New Point(Jp, Ip)) : LstMaCnt.Add(1)
  28.                     Else
  29.                         LstMaCnt(Mp) = LstMaCnt(Mp) + 1
  30.                     End If
  31.                 End If
  32.             Next Jp
  33.         Next Ip
  34.         For Kp As Integer = 0 To LstMaPnt.Count - 1
  35.             If LstMaCnt(Kp) > 1 Then
  36.                 Dim rctDat As Rect = New Rect(LstMaPnt(Kp).X, LstMaPnt(Kp).Y, matTmp.Width, matTmp.Height)
  37.                 Cv2.Rectangle(matSoc, rctDat, New OpenCvSharp.Scalar(0, 0, 255), 1)
  38.             End If
  39.         Next Kp
  40.         PictureBoxIpl1.ImageIpl = matSoc
  41.  

 

| | コメント (0)

2020.08.18

OpenCVSharpのORB、AKAZEを使った画像比較

6年前に、OpenCVSharpのSURFを使った画像比較という記事を書いたが、OpenCVSharpがバージョンアップして、ライセンスかなにかで、SURFというオブジェクトが無くなっていた。ので、ORB(Oriented-BRIEF)特徴量と、AKAZE 特徴量というオブジェクトを使って、サンプルプログラムを作ってみた。サンプルなので、精度の良い画像比較はされていないが、チューニングすれば、実用的なプログラムに出来ると思う。

Blog200818a

ORB特徴量による画像比較。

Blog200818b
AKAZE特徴量による画像比較。




  1.        Dim matSc1 As Mat = New Mat("Sample1.png", ImreadModes.Color)
  2.         Dim matSc2 As Mat = New Mat("Sample2.png", ImreadModes.Color)
  3.         Dim matDst As Mat = New Mat()
  4.         '
  5.         Dim MyORB = ORB.Create(100)
  6.         Dim KeyPt1 As KeyPoint(), KeyPt2 As KeyPoint()
  7.         Dim matDs1 As Mat = New Mat()
  8.         Dim matDs2 As Mat = New Mat()
  9.  
  10.         MyORB.DetectAndCompute(matSc1, Nothing, KeyPt1, matDs1)
  11.         MyORB.DetectAndCompute(matSc2, Nothing, KeyPt2, matDs2)
  12.  
  13.         Dim BfMat As New BFMatcher(normType:=NormTypes.Hamming, True)
  14.         Dim DmatA As DMatch() = BfMat.Match(matDs1, matDs2)
  15.  
  16.         Cv2.DrawMatches(matSc1, KeyPt1, matSc2, KeyPt2, DmatA, matDst, Scalar.Red, Nothing, Nothing, DrawMatchesFlags.Default)
  17.  
  18.         PictureBoxIpl1.ImageIpl = matDst
  19.  
  20.  

 

 

| | コメント (0)

2020.08.16

OpenCVSharpを使ったVB.NETプログラム

数年前、タイトルと同じプログラムを作成したが、バージョンアップされ、インストール方法も、メソッドも違ったので、作り直してみた。

Blog200816a

Blog200816b

Blog200816c

Blog200816d

 

 

 

  1. Dim matSoc As Mat = New Mat("Sample1.png")
  2. Cv2.CvtColor(matSoc, matSoc, ColorConversionCodes.RGB2GRAY)
  3. Dim matBin As Mat = New Mat()
  4. Cv2.Threshold(matSoc, matBin, 127, 255, ThresholdTypes.Binary)
  5.  PictureBoxIpl1.ImageIpl = matBin

Blog200816e

元データ

Blog200816f

 

 

 

  1. Dim matSoc As Mat = New Mat("Sample2.png")
  2. Dim matGry As Mat = matSoc.CvtColor(ColorConversionCodes.BGR2GRAY)
  3. Dim matHou As Mat = matSoc.Clone()
  4.  
  5. Cv2.GaussianBlur(matGry, matGry, New OpenCvSharp.Size(9, 9), 0)
  6. Dim Circles As CircleSegment() = Cv2.HoughCircles(matGry, HoughMethods.Gradient, 1, 100, 150, 55, 0, 0)
  7. For Each item As CircleSegment In Circles
  8.       matHou.Circle(New Point(item.Center.X, item.Center.Y), CInt(Math.Truncate(item.Radius)), New Scalar(0, 255, 0), 5)
  9. Next
  10. PictureBoxIpl1.ImageIpl = matHou

 

Blog200816g

元データ 

Blog200816h

 

 

 

 

  1. Dim matSoc As Mat = New Mat("Sample3.png")
  2. Dim matBny As Mat = matSoc.CvtColor(ColorConversionCodes.BGR2GRAY)
  3. Dim matDst As Mat = matSoc.Clone
  4.         '
  5. Cv2.Threshold(matBny, matBny, 60, 255, ThresholdTypes.Binary)
  6. Dim blobs As New CvBlobs()
  7. blobs.Label(matBny)
  8. blobs.RenderBlobs(matSoc, matDst)
  9. PictureBoxIpl1.ImageIpl = matDst
  10.  

Blog200816i

 

 

 

  1. Dim matSoc As Mat = New Mat("Sample3.png")
  2. Dim matBny As Mat = matSoc.CvtColor(ColorConversionCodes.BGR2GRAY)
  3. Dim matDst As Mat = New Mat(matSoc.Size, matSoc.Type)
  4.  '
  5. Cv2.Threshold(matBny, matBny, 60, 255, ThresholdTypes.Binary)
  6. Dim blobs As New CvBlobs()
  7. blobs.Label(matBny)
  8.  
  9. For Each item As KeyValuePair(Of Integer, CvBlob) In blobs
  10.      Dim b As CvBlob = item.Value
  11.      Dim cc As CvContourChainCode = b.Contour
  12.      cc.Render(matDst)
  13. Next item
  14. PictureBoxIpl1.ImageIpl = matDst

 

| | コメント (0)

2020.08.09

地元歩きある記---隣町

今日は朝、町内のお寺の清掃。例年なら、町内の檀家、門徒が集って、お御堂と外の掃除をするのだが、今年はコロナ禍、三密を避けるということで、中止。それでも、全くしないわけにはいかにすので、総代(班長)さんだけで、外掃除をした。目立つところをやって、40分ほどで終わった。それから、僕はご縁さんと境内で、立ち話。それから、うちのところの草刈りをした。それも、30分もすると、暑くなってきたので止めた。そして、今日は夕方、一人で、隣町をウォーキングした。

Blog200809b

歩いている途中の夕景。

Blog200809a

同じところの道路標識、17時30分ごろ撮影。

| | コメント (0)

2020.08.03

親父の死去から5か月目

今日で、親父が亡くなって5か月。5か月とはいえ、世の中、コロナ禍の最中で、まだ5か月かという感想しかない。もっとも、先月、親父のお骨をお墓に納めて、一通りのことは終えたという気持ちになっている。

Blog200803a

ウォーキング中の夕景。最近は、友人が腰痛で、一人で歩くことが多くなった。

| | コメント (0)

2020.07.24

親父の納骨

今日は朝から雨。でも、午後になって雨が止んで、予定通り、親父の骨を、町内の墓地にあるうちのお墓に納めた。妹と車で墓地まで行って、その後、ご縁さん(町内のお寺の住職)が来て、納骨の後、お墓の前で、お経をあげてもらった。これで、お寺の納骨と、家の墓への納骨が済んだ。あとは、京都へ行って納骨するだけ。でも、このコロナ禍の今、いつになるかは未定。親父の骨は、もうしばらくは家にいてもらおうと思う。

Blog200724a

納骨前のうちのお墓

| | コメント (0)

2020.07.19

社会奉仕2020

〇毎年、この時期になると社会奉仕が行われる。「社会奉仕」、町民総出で、公民館の広場とか町内の道路端、あるいは河川など掃除する行事を、地元では、「社会奉仕」というのである。それが、今朝の7時から9時までの2時間、行われた。例年なら3時間ほどするのだが、コロナ禍の影響で短縮され、いつもは出されるかき氷(氷菓)もなかった。そして、午後は、区費(町内会費)を納入しに、公民館まで行った。そこで、友人や町内の人、近くの駐在所のお巡りさんと雑談をした。しばらくして、そのお巡りさんがうちに来たので、親父が亡くなったことなど家族構成が変わったことを伝えた。どうやら、警察と市役所は住民データの供用が出来ないししないので、家々を回って調べるとか。マイナンバーカードがどうのこうのと言っている一方で、やり方は従来通りの縦割り、おかしいと思った。

Blog200719a

草刈機で綺麗にしたところ、僕だけではないが・・・。

 

| | コメント (0)

2020.07.09

地元歩きある記---地区内

今日は午後から、家の前の畑の芋掘りを一人でした。と言っても、狭い畑で植えた芋もそんなになかったので、1時間半ぐらいで終わった。それでも、疲れたが、町内の友人Mさんに誘われたので、今日も近くをウォーキングした。今日は、地区の公民館まで乗用車で行って、そこから歩いた。

Blog200709a

まずまずの出来かな?!

Blog200709b

ウォーキング途中の遠景。

| | コメント (0)

«初めてのパブリックコメント提出