Merhabalar, bugün bir morfoloji işlemi olan dilation erosion konularını nasıl uygulayacağımızı göstermek istedim.
Erosion var olan verinin bazı kısımlarını atarak daha kesin ve öz bir sonuca ulaşmamızı sağlarken, Dilation tam tersi verimizi genişletir. Bu işlemler verinin basitleşmesine ve daha çok işlem yapılabilir hale gelmesine yardımcı olur örneğin binary yani tamamen siyah ve beyazdan oluşan bir fotoğraftaki küçük noise yani gürültüleri ortadan kaldırılmasına yardımcı olur.
Dilation:
videoda görüldüğü gibi 3x3lük bir maske sırayla her piksel üzerinde gezdirilmektedir ve eğer herhangi birinde beyaz piksel varsa yeni fotoğraftaki orta nokta da beyaz oluyor. (bu bir nevi or’lama işlemidir.) Ben kodlama yaparken daha nasıl basitleştiririm diye düşünürken: Dilation için her beyaz noktayı merkeze aldığımızda 3x3lük maskenin tamamının da yeni fotoğraf için beyaz olduğunu farkettim. Erosion için de aynısının tam tersi geçerli her siyah noktayı 3x3lük maskenin ortasına getiririsek diğer tüm pikseller de yeni resim için siyah oluyor buna göre şöyle bir kod yazdım:
(pikseller tek bir arrayde soldan sağa ve yukarıdan asağıya doğru tutuluyordu)
BYTE* newbuf = copyBuffer(process); //copy the image for (int row = 1; row < Height - 1; row++) { for (int col = 1; col < Width - 1; col++) { if (newbuf[row * Width + col] == 255) { process[(row - 1) * Width + col - 1] = 255; process[(row - 1) * Width + col] = 255; process[(row - 1) * Width + col + 1] = 255; process[row * Width + (col - 1)] = 255; process[row * Width + (col + 1)] = 255; process[(row + 1) * Width + (col - 1)] = 255; process[(row + 1) * Width + col] = 255; } } } setImageToPictureBox2(process, Width, Height);
BYTE* newbuf = copyBuffer(process); for (int row = 1; row < Height - 1; row++) { for (int col = 1; col < Width - 1; col++) { if (newbuf[row * Width + col] == 0) { process[(row - 1) * Width + col - 1] = 0; process[(row - 1) * Width + col] = 0; process[(row - 1) * Width + col + 1] = 0; process[row * Width + (col - 1)] = 0; process[row * Width + (col + 1)] = 0; process[(row + 1) * Width + (col - 1)] = 0; process[(row + 1) * Width + col] = 0; } } } setImageToPictureBox2(process, Width, Height);
Sonuçlar:
Orijinal hali
Dilation
Erosion
Bir yanıt yazın