Python İle Resim Pixel Yoğunluğunu Okuma ?
-
italyan bunu yazdıltcelik bunu yazdı
Filin neresini tutarsanız orasını görürsünüz..
Konu nasıl buraya geldi
Konu hep burdaydı.. ama kimileri farkında değiller..
-
itcelik hocam görüntüyü 2 bit indiriyorum.
ölçek kısmını 10 pixel olarak yaparsam sağlıklı olacağını düşünüyorum.
Kadane’s Algorithm den heralde olayı çözücem
sonucu yazarım :)
Herkese teşekkür ederim.
-
9 piksel daha mantıklı değil mi?
1 piksel ve çevresindekiler..
-
Hocam kafandaki algoritmayi degil de tam olarak ne yapmak istedigini aciklayabilir misin? Bu siyah goruntuyu mu yakalamak istiyorsun?
-
ben anladığım kadarı ile yatay ve dikey histogram istiyor
-
unbalanced bunu yazdı
soruyu tam anlamamakla birlikte anladigim kadariyla cevaplayayim :)
pixelleri yatay ve dikey olarak saydirip yazdirmissin (o verileri dikey ve yatay histogram gibi düsünebiliriz) ve en cok yogunlugun hangi aralikta oldugunu bulmaya calisiyorsun..
Böyle ise: su sekil bir sey yapabilirsin..
Öncelikle bu araligi nasil dinamik yaparsin onu bilmiyorum ancak sabit aralik üzerinden gidersek yani 4 index deger araligina bakarak gitmek istersen
dizinin ilk 4 elemanindan baslayarak toplayacaksin
var max=0, baslangic=0, bitis=0;
Döngü
var sonuc dizi[i] +dizi[i+1] +dizi[i+2] +dizi[i+3]
if(sonuc>max)
{
baslangic = i;
bitis = i+3;
}
i++;
--- Döngü bitti
print(En cok pixel araligi Baslangic ve Bitis. Toplam pixel: max) (^^D`)
kisaca aciklarsam, ilk Dört Elemani aliyorsun ve Sayisal Degerlerine bakiyorsun, ve Max degeri ile karsilaştiriyorsun, Max degeri en Yüksek pixel Sayisini tutuyor. eger max'tan büyükse, o Araligi baslangic ve bitis Degerlerine yaziyorsun, ve max degerine Toplam pixel Sayisini yaziyorsun. Daha sonra diziyi 1 kaydiriyorsun, ayni islemi 2. eleman'dan itibaren toplam 4 Eleman alip yapiyorsun.. daha sonra yine bir kaydiriyorsun.. döngü sartini, toplam yatay ve dikey index sayisina göre belirleyeceksin, vee istersen 4'lü gruplara ayirmak yerine, toplam Yatay ve Dikey İndex sayisi kaca Tam bölünüyorsa ona göre yapabilirsin, yani 3'e tam bölünüyorsa 3 sayisinin toplamina bakarsin, 4 e tam bölünüyorsa üstte yaptigim gibi (dizi[0] + dizi[1]... gibi ) 4 sayinin toplamina, 5 e bölünüyorsa 5 sayinin toplamina.. bunlardan baska biriyse en standard olarak 3 ya da 4 sayiyi toplarsin..
umarim anlatabilmisimdir :)
kolay gelsin
@@,}
~@~
yanlış anlamadıysam. renklerden bağımsız, siyah beyaz tonu'na bakarak, cismin 2boyutlu bir Düzlemde, hangi yöne gitmeye çalıştığını , bulmaya çalışıyor gibi. yanlış mı anladım?
Kollar ve Bacaklar biraz sıkıntı gibi mi?
bir de, yatayda, x doğrusunda mı hareket gerçekleşiyor, yada ara yönlerde de gidebiliyor mu?
yada yoğun olan Alan'ın merkezi'nin nereye doğru gittiğininin doğrusal olmayan grafiğini mi çizdiriyor?
yada ben yanlış anladım. kafam döndü ^^`
-
Merhaba, el çizimi ok işaretleridir.
Yön olarak ise 2 boyutlu duzlemde, sol dan sağa veyaaveya yukarı veya tam tersleri.
Eğer en dolu eksen x ise yön ya yukarı yada aşağı olmalı.
Y ekseninden bakınca yoğunluk x ekseninne yakın ise ve yoğunl olmayan x eksenin uzak ise ok yukarı yönlüdür gibi
-
edit, tekrardan koyucam
import os import cv2 import numpy as np import sys from matplotlib import pyplot as plt from PIL import Image from numpy import asarray def yonbulma(imgname,yb1,yb2,xb1,xb2): sys.path.append("..") IMAGE_NAME = imgname CWD_PATH = os.getcwd() PATH_TO_IMAGE = os.path.join(CWD_PATH,IMAGE_NAME) image = cv2.imread(PATH_TO_IMAGE) cropimg = image[yb1:yb2, xb1:xb2] cv2.imwrite('crop.jpg', cropimg) ########## 2 renk çeviri im = Image.open('crop.jpg').convert('RGB') # Split into 3 channels r, g, b = im.split() # Increase Reds r = r.point(lambda x: 0 if x<128 else 255, '1') # Decrease Greens g = g.point(lambda i: i * 0) # Decrease Greens b = b.point(lambda i: i * 0) # Recombine back to RGB image result = Image.merge('RGB', (r, g, b)) result.save('threshimg.png') ########## 2 renk çeviri img = cv2.imread("threshimg.png") im = Image.open("threshimg.png") immat = im.load() ########## agırlık merkezi (X, Y) = im.size m = np.zeros((X, Y)) for x in range(X): for y in range(Y): m[x, y] = immat[(x, y)] != (255, 0, 0) m = m / np.sum(np.sum(m)) # marginal distributions dx = np.sum(m, 1) dy = np.sum(m, 0) # expected values dolucx = int(np.sum(dx * np.arange(X))) dolucy = int(np.sum(dy * np.arange(Y))) ########## agırlık merkezi ########## (pixeli en fazla olan yer konumu yüzde) for x in range(X): for y in range(Y): m[x, y] = immat[(x, y)] != (255, 0, 0) #print(m) xsumlist = np.sum(m, 1) #x ekseni üzerindekileri alt alta topla ysumlist = np.sum(m, 0) #y ekseni üzerindekileri alt alta topla xsumlist0 = xsumlist[xsumlist != 0] #0 olmayan x ekseni üzerindekileri değerleri alt alta topla ysumlist0 = ysumlist[ysumlist != 0] #print("x ekseni toplamları",xsumlist) #Pixlellerde max ve min def xmin(): for i in range(X): if xsumlist0[i] > 0: return i break def xmax(): for i in reversed(range(X)): if xsumlist[i] > 0: return i break def ymin(): for i in range(Y): if ysumlist0[i] > 0: return i break def ymax(): for i in reversed(range(Y)): if ysumlist[i] > 0: return i break print("xmax ", xmax()) print("ymax ", ymax()) #hesap if (xmax()>ymax()): alist = xsumlist arl = int(xmax()/2) eksen = "xeks" print("list") print(xsumlist) print("(x ekseni üzerinden hesap)") print("Bakılan Aralık değeri:",arl) else: alist = ysumlist arl = int(ymax()/2) eksen = "yeks" print("list") print(ysumlist) print("(y ekseni üzerinden hesap)") print("Bakılan Aralık değeri:",arl) arlsummax = 50000 arlsumdeg0 = 0 imax = 0 for i in range(0,len(alist)-arl): if alist[i] == 0: continue arlsumdeg0 = 0 for x in range(i,i+(arl+1)): arlsumdeg0 = arlsumdeg0 + alist[x] if (arlsumdeg0 < arlsummax): imax = i arlsummax=min(arlsummax,arlsumdeg0) print(i ,arlsumdeg0) minimin = imax minimax = imax + arl print("aralık (Min) değer için:") print("bakılan aralık değeri:") print("minpixel:",minimin, "maxpixel:", minimax,"aralık toplamı:",arlsummax) arlsummax = 0 arlsumdeg0 = 0 imax = 0 for i in range(0,len(alist)-arl): if alist[i] == 0: continue arlsumdeg0 = 0 for x in range(i,i+(arl+1)): arlsumdeg0 = arlsumdeg0 + alist[x] if (arlsumdeg0 > arlsummax): imax = i arlsummax=max(arlsummax,arlsumdeg0) print(i ,arlsumdeg0) maximin = imax maximax = imax + arl print("aralık (Max) değer için:") print("bakılan aralık değeri:", arl) print("minpixel:",maximin, "maxpixel:", maximax,"aralık toplamı:",arlsummax) if (eksen == "yeks"): if ((maximax+maximin)/2 < (minimin+minimax)/2): sekilyon= "up" else: sekilyon = "down" else: if ((maximax+maximin)/2 > (minimin+minimax)/2): sekilyon= "right" else: sekiyon = "left" print("Seklin Yönü:", sekilyon) print("#####################") #cv2.circle(img, (dolucx, dolucy), 1, (0, 255, 0), 1) #yesil #cv2.circle(img, (xmaxind, ymaxind), 1, (250, 250, 250), 1) #beyaz imgplot = plt.imshow(img) plt.show() yonbulma("test1.jpg", 639, 681, 428, 460)
yonbulma kısmına resim içindeki objenin kordinantlarını yazarsanız....