Matlab'te X(30:80,30:80) gibi bir tanım neyi ifade eder?(Görüntü işleme)

Görüntü işlemede bir shading correction algoritması buldum.Onu koda uyarlamaya çalışıyorum ancak kodun bir bölümünde resme ait piksellerin üzerinde belirttiğim koddaki işlemi yapıyor.(X(30:80,30:80)=X(30:80,30:80)*1.5)Bu kodun anlamını biri açıklayabilirse çok sevinirim.

Merhaba, ( ile indeksleme yapılıyor, Python’daki [. İçerisindeki ilk 30:80 kısmı, ilk boyuttan 30 ila 80 arasındaki elemanları (ikisi de dahil) seçmeyi belirtiyor, ikinci 30:80 de ikinci boyuttan 30 ila 80 arasındaki elemanları (ikisi de dahil) seçmeyi belirtiyor. Python’da, daha doğrusu NumPy’da, karşılığı X[29:80, 29:80] oluyor çünkü MATLAB 1-indeksli olup başı/sonu dahil indeksleme yaparken, Python, ve NumPy, 0-indeksli olup başı dahil sonu hariç indeksleme yapar. X iki boyutluysa, 30’dan 80’e kadar olan satırlarla 30’dan 80’e kadar olan sütunların belirlediği 51 x 51 dikdörtgensel bölgeyi seçiyoruz diyebiliriz. Tüm işlemin yaptığı da bu dikdörtgensel alandaki elemanların değerini 1.5 katına çıkarmak oluyor. MATLAB’da *= olmadığından öyle iki kere seçmek lazım geliyor.

Eğer X 3 boyutluysa, yukarıdakilerin geçerli olmasıyla beraber, 3. boyutu indekslemediğinizden MATLAB o boyuttaki 1. elemanı (1. derinliği diyebiliriz) otomatik olarak seçiyor. Bu NumPy’ın davranışından farklıdır; indekslemediğiniz boyutta NumPy tamamını seçer. MATLAB’da size(X(30:80, 30:80)) diyerek seçilen kısmın boyutlarını görebilirsiniz, 51 51 olsa gerek. Deneyebileceğim bir MATLAB şu anda yok ama Octave’da denedim, öyleydi :d 3 boyutlunun uyarlanmasında dolayısıyla X[29:80, 29:80, 0] *= 1.5.

3 Beğeni

Çok kapsamlı anlatmışsınız.Çok teşekkür ederim cevabınız için.@ Then_Shiffman

1 Beğeni