none
影像進行反三角函數 RRS feed

  • 問題

  • 有4張灰階圖,分別設為bmp1、bmp2、bmp3、bmp4,現在要讓他進行atan((bmp4-bmp2)/(bmp1-bmp3)),以下是我的程式碼

     

     

     

            Dim image1 As Bitmap = Nothing

            Dim piexl1 As Color

            Dim piexl2 As Color

            Dim piexl3 As Color

            Dim piexl4 As Color

            Dim x, y, a, b, c, d, f As Double

            For x = 0 To bmp1.Width - 1

                For y = 0 To bmp1.Height - 1

                    piexl1 = bmp1.GetPixel(x, y)

                    piexl2 = bmp2.GetPixel(x, y)

                    piexl3 = bmp3.GetPixel(x, y)

                    piexl4 = bmp4.GetPixel(x, y)

                    a = piexl1.B

                    b = piexl2.B

                    c = piexl3.B

                    d = piexl4.B

                    f = (d - b) / (a - c)

                    Dim piexl5 As Integer = Math.Atan(f)

                    image1.SetPixel(x, y, Color.FromArgb(piexl5, piexl5, piexl5))

                Next

            Next

            PictureBox5.Image = image1

    執行後image1.SetPixel(x, y, Color.FromArgb(piexl5, piexl5, piexl5))出現錯誤"'-1' 不是 'red' 的有效值。'red' 必須大於或等於 0,並且小於或等於 255。"

    因為,反三角函數後像素出現負值,所以無法顯示圖片,所以將piexl5加上3.14,卻還是出現"並未將物件參考設定為物件的執行個體"

    請問有人知道該怎修改?

     

     

     


    2011年8月17日 上午 05:01

解答

所有回覆


  • 加上判斷 plexl5 大小是否可行? 

        Dim piexl5 As Integer = Math.Atan(f)
        If piexl5 < 0 Then
          piexl5 = 0
        ElseIf piexl5 > 255 Then
          piexl5 = 255
        End If
        image1.SetPixel(x, y, Color.FromArgb((piexl5, piexl5, piexl5))

     

    2011年8月17日 上午 05:09
    版主
  • 加上這段還是不行,現在錯誤都是"'-1' 不是 'red' 的有效值。'red' 必須大於或等於 0,並且小於或等於 255。"

    不管piexl5加上多少,錯誤還是一樣。

    2011年8月17日 上午 05:21
  • 把程式放到 SkyDrive 並提供連結,讓網友協助分析問題


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年8月17日 上午 05:33
    版主
  • Dim image1 As Bitmap = Nothing <--你並沒有為image1產生執行個體, 所以 出現"並未將物件參考設定為物件的執行個體" 是正常的

    請參考MSDN文件庫 [Bitmap 建構函式]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年8月17日 上午 08:12
    版主
  • 安你好

    是否提供當發生錯誤時 你的 變數 f 的值是多少

    可能原因猜測

    來自MSDN 

    Math.Atan 方法

    http://msdn.microsoft.com/zh-tw/library/system.math.atan(v=vs.80).aspx

    傳回值

    以弧度測量的角度 θ,所以 -π/2 θπ/2。 -或- 如果 d 等於 NaN,則為 NaN;如果 d 等於 NegativeInfinity,則為捨入為雙精度的 -π/2 (-1.5707963267949);如果 d 等於 PositiveInfinity,則為捨入為雙精度的 π/2 (1.5707963267949)。

    另小歐 大 的判斷是可行的。

    如還是不行請方便麻煩PO出你的測試專案。

    已上參考

    2011年8月18日 上午 09:02