Dilation ve Erosion İşlemleri Görüntü İşleme

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.

bkz. Opening

bkz. Closing

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


Yorumlar

“Dilation ve Erosion İşlemleri Görüntü İşleme” için bir yanıt

  1. Caglar demir avatarı
    Caglar demir

    Verdiğin bilgiler için teşekkür ederim..

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir