Yahu şu kodlarla sabahtan beri uğraşıyorum. Girinti hatası yapıyorum, kodlar çalışıyor, ama girinti hatası yüzünden çok geç çalışıyor. Hala hatamı çözemedim, bana yardımcı olabilirseniz sevinirim.
from pylab import * from PIL import Image görüntü = array(Image.open(r"jpg_dosyası_yolu\jpgdosyası.jpg").convert("L")) boşluk = ones((len(görüntü), 20))*255 #iki görüntü arasında dikey beyaz boşluk boşluk_1 = ones((100,len(görüntü[0])+len(görüntü[0])+20))*255 #yatay boşluk #İlk olarak Mean_filter fonksiyonu ile görüntüye aritmetik, geometrik ve harmonik #filtre uygulanacaktır. def Mean_filter(görüntü1, kernel_boyutu): kernel_dizisi = [] kernel_dizisi_1 = [] k_i = kernel_boyutu//2 mean_veri = [] çarpan = 1 #Aritmetik(mean_veri), geometrik(geo_maen_veri) ve harmonik(har_mean_veri) #0 dizilerine filtreler uygulandıktan sonra kaydedilecektir. mean_veri = zeros((len(görüntü), len(görüntü[0]))) geo_mean_veri = zeros((len(görüntü), len(görüntü[0]))) har_mean_veri = zeros((len(görüntü), len(görüntü[0]))) #iç içe for döngüleri aritmatik, geometrik ve harmonik filtlerelerin #matematiksel modelleri kullanılarak pikseller tek tek işlenmektedir. for i in range(len(görüntü)): for j in range(len(görüntü[0])): #k_i değişkeni ile görüntüdeki kernel boyutunu tam sayı olarak ikiyi #bölündüğü değer kadar görüntünün alt, üst, sağ ve sol #piksellerin değerlerinin değiştirmemektedir. if(i-k_i<0 or i+k_i>len(görüntü)-1) or (j-k_i<0 or j+k_i>len(görüntü[0])-1): mean_veri[i][j] = görüntü[i][j] geo_mean_veri[i][j] = görüntü[i][j] har_mean_veri[i][j] = görüntü[i][j] #aritmetik, geometrik ve harmonik filtrelerin matematiksel modelleri uygulamak için else: for k in range(kernel_boyutu): for m in range(kernel_boyutu): #Piksel çarpımından oluşan geometrik filtrede Kernel boyutu arttıkça çarpma işlemi #sonucunda elde edilen değerler çok büyüktür. Bu nedenle elde edilen sonuçlar #önce 10'a bölünüp filtreleme işlemleri gerekleştirildikten sonra tekrar 10 ile #çarpılarak normal görüntüye dönüştürülmüştür. kernel_dizisi.append(görüntü[i-k_i+k][j-k_i+m]/10) #Harmonik filtre 1/piksel değeri olarak işlem yapıldığı için eğer piksel değeri #0 olduğunda sonucun 1/0 olarak belirsiz çıkmaması için bu değer 0 alınmıştır if görüntü[i-k_i+k][j-k_i+m]==0: kernel_dizisi_1.append(0) else: kernel_dizisi_1.append(1/görüntü[i-k_i+k][j-k_i+m]) if len(kernel_dizisi)==kernel_boyutu*kernel_boyutu: #Geometrik filtreleme için denklemde verilen matematiksel işlemler gerçekleştirilmektedir. for b in range(kernel_boyutu*kernel_boyutu): çarpan=abs(çarpan*kernel_dizisi[b]) if çarpan<0: çarpan = 0 x = kernel_boyutu*kernel_boyutu geo_mean=çarpan**(1/x) geo_mean_veri[i][j] = int(geo_mean*10) #Aritmetik (art_mean) için oluşan kernel dizisinin ortalaması hesaplanmaktadır art_mean=mean(array(kernel_dizisi)) mean_veri[i][j]=int(art_mean*10) #Harmonik (har_mean) filtreleme için denklemde verilen matematiksel işlmeler gerçekleştirilmektedir. toplam=sum(kernel_dizisi_1) if toplam==0: har_mean=0 else: har_mean=x/toplam har_mean_veri[i][j]=int(har_mean) #kernel_dizisi, kernel_dizisi_1 ve çarpan değerleri diğer piksel işlemleri için resetlenmektedir. kernel_dizisi = [] kernel_dizisi_1 = [] çarpan=1 return mean_veri, geo_mean_veri, har_mean_veri art_mean_görüntü, geo_mean_görüntü, har_mean_görüntü = Mean_filter(görüntü, 5) #fonksiyona git #orijinal görüntü(görüntü), beyaz boşluk(boşluk), aritmetik filtreleme görüntüsü(art_mean_görüntü) yatay eksende yan yana getirilmiştir. x=concatenate((görüntü, boşluk, art_mean_görüntü), axis=1) #Harmonik görüntü(har_mean_görüntü), beyaz boşluk(boşluk), geometrik filtreleme görüntüsü(geo_mean_görüntü) yatay eksende yan yana getirilmiştir. x1=concatenate((har_mean_görüntü, boşluk, geo_mean_görüntü), axis=1) x2=vstack((x, boşluk_1,x1)) #x2=x+boşluk+x1 dikey eksende resimler birleştirilmiştir. img=Image.fromarray(x2) imshow(img, cmap="gray") show()```
Örnek jpg dosyasını kendiniz seçebilirsiniz, girinti hatama yardımcı olursanız sevinirim.
Bu kodlar ile jpg dosyalarına aritmatik, harmonik ve geometrik filtreler uyguluyorum. Sırayla 4 görüntü elde ediyorum, bunlardan ilki orijinal görüntü, ikincisi aritmetik filtre, üçüncüsü harmonik, sonuncusu da geometrik filtre olacak.
Umarım girinti hatasını bulursunuz. Kodlar çalışıyor, ama çok uzun sürüyor. Girinti hatam yüzünden, hem uzun sürüyor, hem de orijinal görüntüyü de elde edemiyorum, hatamı bir türlü çözemedim…