« ロプノールの近くに | トップページ | ぶらり奥多摩 »

2011年7月21日 (木)

他のとチノーよ

仕事でまた新しいサーモカメラをいぢってます。

http://www.chino.co.jp/products/thermovisions/tp-l.html

とりあえず自分の顔など撮ってみました。

Thermocamera

なんだこの太目のタモリは!(^^;

太タモなのはともかく、計測値がちょっと高過ぎで、計測用のソフトにある最高温度表示では口の周りが42℃とか出てます。輻射率は変更可能ですが、大きい方には 1.00 までなので、計測値はこれより低めにはならないようです。う~ん、校正が必要なのかなぁ。JPG の他に CSV ファイルも吐き出してくれるので、そちらを参照して補正かけるのも手かも。

一番の問題は、今回購入したモデルの PC とのインターフェースが LAN で、PC もカメラも固定 IP が要求されること。会社の、あるいは多くのネットワークとの相性が悪過ぎです(カメラ使っていると有線 LAN 使えない)。USB モデルじゃないとだめだねこれは。ところがこの USB モデルのフレームレートが秒1コマとかボケな仕様なので、これまた困ったちゃんです。

先に使った NEC AVIO のカメラの方が良いのは確かですが、あちらは50万円、こちらは20万円。海外製品探すかなぁ。

 http://pawpaw.cocolog-nifty.com/pawpaw_house/2010/08/post-df9d.html

 http://pawpaw.cocolog-nifty.com/pawpaw_house/2010/09/necavio-65cb.html

iPad にサーモカメラ付けたモデルが出れば、それをプラットフォームにして直ぐ製品化出来るのになぁ… って一体ナニ作っているやら(^^;。

■おまけ1■
カメラ添付のソフトだけじゃ面白くないので、カメラが生成する CSV ファイルを読み込んで画像を生成するソフトを作ってみました。読み込んだ時点の画面のキャプチャがこれ。

Original

35℃未満が真っ青、45℃以上が真っ赤、その中間は青から赤にかけてグラデーション、という風にしてみましたが、グラデーションの作成がイマイチな感ありですね。勉強しようっと。

■おまけ2■
そのソースです。

Public Class FormMain

    'グローバル変数

    Private Const HighTemp As Single = 45
    Private Const LowTemp As Single = 35
    Private Const CameraWidth As Integer = 48
    Private Const CameraHeight As Integer = 47
    Private ThermoData(CameraWidth, CameraHeight) As Single
    Private BitmapThermoGraph = New Bitmap(CameraWidth, CameraHeight)

    Private CsvFilter As String = "csv files (*.csv)|*.csv|All files (*.*)|*.*"

    'ファイルオープンボタン処理

    Private Sub ButtonOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOpen.Click
        If (OpenFile() = True) Then
            MakeThermoGraph()
        End If
    End Sub

    'データファイルをオープンする

    Private Function OpenFile() As Boolean
        Dim l As String
        Dim s() As String
        Dim n As Integer
        Dim x As Integer
        Dim y As Integer

        Try
            Using fd As New OpenFileDialog
                fd.Filter = CsvFilter
                fd.FilterIndex = 1
                fd.DefaultExt = ".csv"
                fd.RestoreDirectory = True

                If (fd.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                    Using sr As New System.IO.StreamReader(fd.FileName)
                        Do
                            l = sr.ReadLine
                        Loop While (InStr(l, "xy") = 0)
                        For y = 0 To CameraHeight - 1
                            l = sr.ReadLine
                            s = Split(l, ",")
                            n = UBound(s)
                            If (n >= CameraWidth) Then
                                For x = 0 To CameraWidth - 1
                                    ThermoData(x, y) = Val(s(x + 1))
                                Next
                            End If
                        Next
                        sr.Close()
                        sr.Dispose()
                    End Using
                    Return True
                Else
                    Return False
                End If
            End Using

        Catch ex As Exception
            MessageBox.Show("Data File Open Error", "Open Data File", MessageBoxButtons.OK)
            Return False

        End Try
    End Function

    '温度データから画像を作成する

    Private Sub MakeThermoGraph()
        Dim x As Integer
        Dim y As Integer

        For x = 0 To CameraWidth - 1
            For y = 0 To CameraHeight - 1
                BitmapThermoGraph.SetPixel(x, y, MakeColor(ThermoData(x, y)))
            Next
        Next
        PictureThermoGraph.Invalidate()
    End Sub

    '温度データからカラーを生成

    Private Function MakeColor(ByVal s As Single) As Color
        Dim c As Color
        Dim a As Single
        Dim r As Single
        Dim g As Single
        Dim b As Single

        'Calc A
        If (s > HighTemp) Then
            a = 0
        ElseIf (s < LowTemp) Then
            a = 255
        Else
            a = ((HighTemp - s) / (HighTemp - LowTemp)) * 255
        End If

        'Calc Red
        If (s > HighTemp) Then
            r = 255
        ElseIf (s < LowTemp) Then
            r = 0
        Else
            r = ((s - LowTemp) / (HighTemp - LowTemp)) * 255
        End If

        'Calc Green
        g = 0

        'Calc Blue
        If (s > HighTemp) Then
            b = 0
        ElseIf (s < LowTemp) Then
            b = 255
        Else
            b = ((HighTemp - s) / (HighTemp - LowTemp)) * 255
        End If

        'Make Color
        c = Color.FromArgb(255, CInt(r), CInt(g), CInt(b))

        Return c
    End Function

    'ピクチャーボックスリサイズ時の再描画

    Private Sub PictureThermoGraph_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureThermoGraph.SizeChanged
        PictureThermoGraph.Invalidate()
    End Sub

    'ピクチャーボックスに画像を貼り付ける

    Private Sub PictureThermoGraph_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureThermoGraph.Paint
        If Not (BitmapThermoGraph Is Nothing) Then
            e.Graphics.DrawImage(BitmapThermoGraph, 0, 0, PictureThermoGraph.Width, PictureThermoGraph.Height)
        End If
    End Sub

End Class

■おまけ3■
タイトルの元ネタは「他のとチノンよ」という、昔々のチノンのCMでした。けど、カメラが何だったか失念。ベラミ?

|

« ロプノールの近くに | トップページ | ぶらり奥多摩 »

コメント

てっきりグレイさんかと…

投稿: 松本信男 | 2011年7月23日 (土) 23時19分

Not little Greys, but "Fat" Greys !?

投稿: Pawpaw | 2011年7月24日 (日) 06時57分

コメントを書く



(ウェブ上には掲載しません)




« ロプノールの近くに | トップページ | ぶらり奥多摩 »