|
分類:[VB.NET/VB2005 以降]
開発環境:Visual Studio 2012 Express for windows desktop
使用言語:Visual basic 2012
こんにちは。774と申します。現在VBを使用した画像処理について学習中です。
今回質問させて頂くのはラプラシアンフィルタを用いたエッジ検出プログラムについてです。
msdnのアルゴリズム画像処理入門第3章(http://msdn.microsoft.com/ja-jp/cc998604)のC#での上記の方法でのエッジ検出プログラムを参考にして取り組んでいるのですが、
一応完成したソースコードでエラーもなく実行してみたところ、期待する結果が得られず、一面黒一色になってしまいます。
何度かソースコードを見返してみたのですがなにが間違っているのかわかりません。お力添え頂けると幸いです。
上記の参考ページのソースコードの、画像に対するフィルタの直後の(中略)の部分が何を略したのかがわからなかったことが問題の一つだと思います。
初歩的な質問になるかもしれませんが何卒よろしくお願い致します。
[以下ソースコード]
Public Sub Lapacian(iAmp As Integer)
Dim i As Integer, j As Integer, iColorValue As Integer
Dim iFilter As Integer() = New Integer() {-1, -1, -1, -1, 8, -1, _
-1, -1, -1}
'変数の宣言 iArrayValue : ピクセル色情報の配列
Dim iArrayValue As Integer(,) = New Integer(PictureBox1.Image.Width - 1, PictureBox1.Image.Height - 1) {}
Dim cArrayColor As Color() = New Color(8) {} '変数の宣言 cArrayColor : 色情報の配列
Dim cSetColor As Color '変数の宣言 cSetColor : 設定する色
Dim bBitmap As Bitmap = New Bitmap(PictureBox1.Image)
'画像に対するフィルタ処理
For i = 1 To PictureBox1.Image.Width - 2
For j = 1 To PictureBox1.Image.Height - 2
iColorValue =
iFilter(0) * cArrayColor(0).R + iFilter(1) * cArrayColor(1).R +
iFilter(2) * cArrayColor(2).R + iFilter(3) * cArrayColor(3).R +
iFilter(4) * cArrayColor(4).R + iFilter(5) * cArrayColor(5).R +
iFilter(6) * cArrayColor(6).R + iFilter(7) * cArrayColor(7).R +
iFilter(8) * cArrayColor(8).R
iColorValue = iAmp * iColorValue '出力レベルの設定
' icolorValue が負の場合
If iColorValue < 0 Then
iColorValue = -iColorValue '正の値に変換
End If
'iColorValueが255より大きい場合
If iColorValue > 255 Then
iColorValue = 255 'icolorValue を255に設定
End If
iArrayValue(i, j) = iColorValue 'icolorValueの設定
Next
Next
' フィルタ処理の結果の出力
For i = 1 To PictureBox1.Image.Width - 2
For j = 1 To PictureBox1.Image.Height - 2
'iArrayValue値による色の設定
cSetColor = Color.FromArgb(iArrayValue(i, j),
iArrayValue(i, j), iArrayValue(i, j))
'ピクセルの色の設定
bBitmap.SetPixel(i, j, cSetColor)
Next
Next
PictureBox2.Image = bBitmap
End Sub
|