Фильтр Собеля

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sergey89
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 30.09.2014 (Вт) 10:48

Фильтр Собеля

Сообщение Sergey89 » 10.10.2014 (Пт) 9:09

Не работает оператор Собеля. Подскажите, пожалуйста, в чем проблема?
Код: Выделить всё
Dim w As Integer, h As Integer

Private Sub Form_Load()
w = Picture1.ScaleWidth
h = Picture1.ScaleHeight
End Sub

Private Sub Picture1_Click()
Dim X As Single, Y As Single
Dim I As Single, J As Single
Dim Sx, Sy, S
Dim piX As Integer, piY As Integer
Dim R, G, B
Dim N

Dim Mx(2, 2) As Integer
Dim My(2, 2) As Integer

Mx(0, 0) = -1: Mx(1, 0) = -2: Mx(2, 0) = -1
Mx(0, 1) = 0: Mx(1, 1) = 0: Mx(2, 1) = 0
Mx(0, 2) = 1: Mx(1, 2) = 2: Mx(2, 2) = 1

My(0, 0) = -1: My(1, 0) = 0: My(2, 0) = 1
My(0, 1) = -2: My(1, 1) = 0: My(2, 1) = 2
My(0, 2) = -1: My(1, 2) = 0: My(2, 2) = 1

Sx = 0
Sy = 0
S = 0

For Y = 1 To h - 1
    For X = 1 To w - 1
Sx = 0
Sy = 0
S = 0
    For J = -1 To 1
    For I = -1 To 1
   
    piX = I + X
    piY = J + Y
   
    p = Picture1.Point(piX, piY)
   
    R = p Mod 256
    G = (p \ 256) Mod 256
    B = (p \ 256 \ 256) Mod 256
   
    N = (R + G + B) / 3
   
    Sx = Sx + N * Mx(I + 1, J + 1)
    Sy = Sy + N * My(I + 1, J + 1)
   
    Next I
    Next J
S = Sqr(Sx ^ 2 + Sy ^ 2)

If S > 255 Then S = 255
If S < 0 Then S = 0

Picture1.PSet (X, Y), RGB(S, S, S)
    Next X
Next Y

End Sub


Последний раз редактировалось Sergey89 11.10.2014 (Сб) 8:23, всего редактировалось 2 раз(а).

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Фильтр Собеля

Сообщение Mikle » 10.10.2014 (Пт) 11:02

Если бы я умел читать мысли, я бы предположил, что на PictureBox должна быть какая-то картинка, ScaleMode у PictureBox установлен в VBPixels, иначе работать будет в 225 раз медленнее, в начале добавлена строка Option Explicit, переменная P объявлена, у неё, да и у других переменных, явно задан тип.

Sergey89
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 30.09.2014 (Вт) 10:48

Re: Фильтр Собеля

Сообщение Sergey89 » 11.10.2014 (Сб) 8:23

Результат тот же. Добавил полученное изображение. Явно не результат Собеля.
Вложения
img.jpg
img.jpg (28.54 Кб) Просмотров: 2285

Sergey89
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 30.09.2014 (Вт) 10:48

Re: Фильтр Собеля

Сообщение Sergey89 » 12.10.2014 (Вс) 7:07

В чем проблема, подскажите, пожалуйста!

Sergey89
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 30.09.2014 (Вт) 10:48

Re: Фильтр Собеля

Сообщение Sergey89 » 12.10.2014 (Вс) 9:07

Разобрался. Записывал в тот же PictureBox, а надо было в другой.
Вложения
img.jpg
img.jpg (34.43 Кб) Просмотров: 2255


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList