<jupyter_start><jupyter_text>podstawowe definicje<jupyter_code>def show2imgs(im1, im2, title1='Obraz pierwszy', title2='Obraz drugi', size=(10,10)):
    
    import matplotlib.pyplot as plt
    
    f, (ax1, ax2) = plt.subplots(1,2, figsize=size)
    ax1.imshow(im1, cmap='gray')
    ax1.axis('off')
    ax1.set_title(title1)

    ax2.imshow(im2, cmap='gray')
    ax2.axis('off')
    ax2.set_title(title2)
    plt.show()
# SEGMENTACJA PRZEZ ROZROST OBSZARU
def howMany(im):# liczymy ilosc obiektow
    g = set() # g jako zbior ilosci obiektow
    l , p = im.shape[0] , im.shape[1] # lecimy po wierszach i kolumnach
    for i in range(1,l - 1):
        for j in range(1,p - 1):
            if im[i][j] != 255:  # jesli nie jest tłem to dodaje 
                g.add(im[i][j]) # wszystkie warosci 
                
    return len(g) # zwraca nie powtarazajace sie wartosci
def isIn(i,j,image): # flaga sprawdzajaca 
    return i >= 0 and i < image.shape[0] and j >=0 and j < image.shape[1]# zwracamy bollean

def bfs(i,j,image,color):
    q = [(i,j)] # q jest zbiorem jednoelementowym z krotka miejsca 
    while q:# czy nie jest to zbior pusty
        ii,jj = q.pop(0) # remove and return last value
        for dx in range(-1,2): # od -1 do 1 wlacznie (sprawdza maske 3x3)
            for dy in range(-1,2):# od -1 do 1 wlacznie (sprawdza maske 3x3)
                if dx == 0 and dy == 0: # to nasz element wiemy ze nalezy dlatego go nie spr
                    continue
                a = ii + dx # wartosc dodana do funji zwieksza o (-1,0,1)
                b = jj + dy
                if isIn(a,b,image) and image[a][b] == 0:#dla konkretnego piksela jeli nalezy do obiektu czyli ==0 to przypis inna wart
                    image[a][b] = color
                    q.append((a,b)) # dodjae do zbioru 


def searchObjects(image):
    cnt = 10
    for i in range(image.shape[0]):# lecimy 
        for j in range(image.shape[1]):
            v = image[i][j] # przypisujemy wartosc
            if v == 0:   # jesli wart=0 czyli jesli jest rozny od tla
                image[i][j] = cnt # przypisujemy new wartsoc
                bfs(i,j,image,cnt) # lecimy do innej funkjci  przekazujemy 1 piksel bfs(i,j-miejsce ,obrazek.)
                cnt += 90  # lecimy dalej ale kolejnem obrazkowi przypiszemy o 90 jesnosci wiecej aby sie  wyroznial
    return image # zwracamy zmieniony obraz<jupyter_output><empty_output><jupyter_text>start<jupyter_code>from skimage.color import convert_colorspace, rgb2lab, rgb2hsv, rgb2gray
import cv2
from skimage import io, color, img_as_ubyte, util
from skimage import data
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import warnings
warnings.filterwarnings('ignore')
from skimage.color import rgb2gray
from skimage import exposure, filters



url = 'images/nowy02.png'
p = io.imread(url)
#pokazuje pierwszy kolorowy rgb obraz
plt.figure(figsize=(5,5))
plt.imshow(p, cmap="gray")
plt.axis('off')
plt.show()
#koniec pokazania


p = color.rgb2gray(p)
print(p[5,5])
#pokazuje w odcieniach szrosci obraz
plt.figure(figsize=(5,5))
plt.imshow(p, cmap="gray")
plt.axis('off')
plt.show()
#koniec pokazan





p = img_as_ubyte(p) #mamy reprezentacje 0-255 zamiast float (0,1)
print(p[5,5])



nbins = 100

histogram = exposure.histogram(p, nbins=nbins)
hist, cbins = histogram

plt.plot(cbins, hist)
plt.xlim([-10, 266])
plt.grid()
plt.show()




#detekcja krawedzi
print('detekcja_krawedzi_Canny')
th = 150
th, blena = cv2.threshold(p, thresh=th, maxval=255, type=cv2.THRESH_OTSU)

clena = cv2.Canny(blena, threshold1=200, threshold2=250, apertureSize = 5, L2gradient = False)

show2imgs(p, clena, title1='Obraz oryginalny', title2='Obraz po detekcji krawędzi', size=(20,20))






#BINARYZACJA
print('binaryzacja')




from skimage import data
import cv2

im = p

th = 1
th, bim = cv2.threshold(im, thresh=th, maxval=255, type=cv2.THRESH_BINARY_INV)

show2imgs(im, bim, title1='Obraz oryginalny', title2='Obraz po binaryzacji', size=(10,10))




#teraz erozja

print(bim[0,0])
print('rozdzielenie sklejonych obiektow')
bim = util.invert(bim)# obraz obracamy


#chcemy erozją rozdzielic obiekty
import cv2

kernel = np.ones((3,3),np.uint8)
erodeBin = cv2.erode(bim, kernel=kernel, iterations=20)

show2imgs(bim, erodeBin, title1='Obraz oryginalny', title2='Obraz po erozji', size=(10,10))



#mamy obraz po erozji name erodeBin

print(erodeBin[0,8])
erodeBin = util.invert(erodeBin)
print(erodeBin[0,8])<jupyter_output><empty_output><jupyter_text>ilosc pikseli w porcentach po erozji<jupyter_code>if(erodeBin[0,7]==255):
    erodeBin = util.invert(erodeBin)
from scipy import ndimage as ndi
label_objects, nb_labels = ndi.label(erodeBin)

def getFigure(labelledImage, objNumber):
    
    points = []
    for y in range(labelledImage.shape[0]):
        for x in range(labelledImage.shape[1]):
            if labelledImage[y,x] == objNumber:
                points.append((y,x))

    return points

print(nb_labels)
a=0
for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    print(len(pts))#dlugosc dla kazdego obiektu na obrazie
    a=a+len(pts)
    if(i==(nb_labels-1)):
        print('ilosc pikseli obiektow na obrazie')
        print(a)
        print('\n')
        
        
erodeBin = util.invert(erodeBin)
from scipy import ndimage as ndi
label_objects, nb_labels = ndi.label(erodeBin)


print(nb_labels)
b=0
for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    print(len(pts))#dlugosc dla kazdego obiektu na obrazie
    b=b+len(pts)
    if(i==(nb_labels-1)):
        print('ilosc pikseli tla na obrazie')
        print(b)
        
        
        
print('procentowy stosunek pikseli obiektow do tla wynosi')
c=(a/b)*100
print(c ,'%')<jupyter_output>51
236
236
195
195
236
236
236
236
195
195
195
195
236
236
236
236
195
195
195
195
236
187
236
236
236
195
195
195
195
236
236
236
236
195
195
195
195
236
236
236
236
195
195
195
195
236
236
236
195
195
195
ilosc pikseli obiektow na obrazie
10962


1
737582
ilosc pikseli tla na obrazie
737582
procentowy stosunek pikseli obiektow do tla wynosi
1.4862076352188638 %<jupyter_text>ilosc pikseli w porcentach przed erozji<jupyter_code>if(bim[0,7]==255):
    bim = util.invert(bim)
from scipy import ndimage as ndi
label_objects, nb_labels = ndi.label(bim)

def getFigure(labelledImage, objNumber):
    
    points = []
    for y in range(labelledImage.shape[0]):
        for x in range(labelledImage.shape[1]):
            if labelledImage[y,x] == objNumber:
                points.append((y,x))

    return points

print(nb_labels)
a=0
for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    print(len(pts))#dlugosc dla kazdego obiektu na obrazie
    a=a+len(pts)
    if(i==(nb_labels-1)):
        print('ilosc pikseli obiektow na obrazie')
        print(a)
        print('\n')
        
        
bim = util.invert(erodeBin)
from scipy import ndimage as ndi
label_objects, nb_labels = ndi.label(bim)


print(nb_labels)
b=0
for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    print(len(pts))#dlugosc dla kazdego obiektu na obrazie
    b=b+len(pts)
    if(i==(nb_labels-1)):
        print('ilosc pikseli tla na obrazie')
        print(b)
        
        
        
print('procentowy stosunek pikseli obiektow do tla wynosi')
c=(a/b)*100
print(c ,'%')<jupyter_output>30
16182
3844
15584
8130
3844
3844
3844
24103
3844
3844
7652
5
1
3
23255
3920
1
12110
7652
7652
3844
12175
3844
3844
3844
7808
4081
3844
3844
3844
ilosc pikseli obiektow na obrazie
200286


51
236
236
195
195
236
236
236
236
195
195
195
195
236
236
236
236
195
195
195
195
236
187
236
236
236
195
195
195
195
236
236
236
236
195
195
195
195
236
236
236
236
195
195
195
195
236
236
236
195
195
195
ilosc pikseli tla na obrazie
10962
procentowy stosunek pikseli obiektow do tla wynosi
1827.0935960591132 %<jupyter_text>indeksacja( kolorowanie) obrazu i wyznaczanie wartosci liczbowych<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
from skimage import io
from skimage.color import rgb2gray

from skimage import io, color, img_as_ubyte, util

path = './images/'

image = erodeBin
if(bim[0,7]==0):
    bim = util.invert(bim)
    
plt.imshow(image, cmap='gray')
plt.axis('on')
plt.suptitle('Analizowany obraz')
plt.show()

bins=np.arange(0, 257)
histo = np.histogram(image, bins=bins)

hist, bins = histo

plt.plot(bins[:-1], hist)
plt.suptitle('Histogram')
plt.show()

image = util.invert(image)
binary=image
print('tworzymy obraz typu label')

from scipy import ndimage as ndi
label_objects, nb_labels = ndi.label(binary)

sizes = np.bincount(label_objects.ravel())
mask_sizes = sizes > 20
mask_sizes[0] = 0
plt.imshow(label_objects, cmap="hot")
figures = mask_sizes[label_objects]
plt.imshow(figures, cmap="hot")
plt.axis('on')
plt.suptitle('Obiekty na obrazie')
plt.show()

print(figures.shape)
print(label_objects.shape)
print(nb_labels)
no_of_object = 4

def cog(labelledImage, objNumber):
    cx = 0
    cy = 0
    for y in range(labelledImage.shape[0]):
        for x in range(labelledImage.shape[1]):
            if labelledImage[y,x] == objNumber:
                cy = cy + y
                cx = cx + x

    cx = cx / sizes[objNumber]
    cy = cy / sizes[objNumber]

    return int(cy), int(cx)

cogs = []
for i in range(nb_labels):
    cogs.append(cog(label_objects,i+1))

print(cogs)

def drawMarkers(image, coords):
    image = np.copy(image)
    for item in coords:
        y,x = item
        for j in range(y-10,y+10):
            image[j,x] = 0
        for i in range(x-10,x+10):
            image[y,i] = 0
    return image


lo = drawMarkers(label_objects, cogs)

plt.figure(figsize=(10,10))
plt.imshow(lo,cmap='hot')
plt.show()
print('ilosc elementow na obrazie')
def getFigure(labelledImage, objNumber):
    
    points = []
    for y in range(labelledImage.shape[0]):
        for x in range(labelledImage.shape[1]):
            if labelledImage[y,x] == objNumber:
                points.append((y,x))

    return points

print(nb_labels)
import math
print('ilosc pikseli nalezacych do poszczegolenych obiektow')
for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    print(len(pts))
print('liczba punktow i srodek ciezkosci')
def cog2(points):
    mx=0
    my=0
    for (y,x) in points:
        mx = mx + x
        my = my + y
    mx = mx/len(points)
    my = my/len(points)
    
    return [my, mx]


for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    
    print('Liczba punktow: ',len(pts),' Srodek ciezkosci: ', cog2(pts))
from scipy.spatial import distance

def computeBB(points):
    
    s = len(points)
    my,mx = cog2(pts)
    
    r = 0
    for point in points:
         r = r + distance.euclidean(point,(my,mx))**2
            
    return s/(math.sqrt(2*math.pi*r))
for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    bb = computeBB(pts)
    
    print('Liczba punktow: ',len(pts), ' Srodek ciezkosci: ', cog2(pts), ' Blair-Bliss: ', bb)
def computeFeret(points):
    
    px = [x for (y,x) in points]
    py = [y for (y,x) in points]
    
    fx = max(px) - min(px)
    fy = max(py) - min(py)
    
    return float(fy)/float(fx)    
print('wartosci Blair-Bliss oraz Feret dla poszczegolnych elementow')


for i in range(nb_labels):
    pts = getFigure(label_objects, i+1)
    bb = computeBB(pts)
    feret = computeFeret(pts)
    
    print('Liczba punktow: ',len(pts),'\nSrodek ciezkosci: ', cog2(pts),'\nBlair-Bliss: ', bb,'\nFeret: ',feret, '\n---\n')
print('wyswietlenie poszczegolnego obiektu')
i = 1
pts = getFigure(label_objects, i+1)
obj = np.zeros(image.shape, dtype='uint8')

for coords in pts:
    obj[coords] = 1

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(5,5))
plt.imshow(obj, cmap="gray")
plt.axis('off')
plt.show()<jupyter_output>wyswietlenie poszczegolnego obiektu
{'fraction_non_alphanumeric': 0.11869987336428874, 'fraction_numerical': 0.06188265090755593, 'mean_word_length': 3.3455612619222306, 'pattern_counts': {'":': 0, '<': 20, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '18238', 'license': 'MIT', 'n_tokens_mistral': 5318, 'n_tokens_neox': 4802, 'n_words': 1196, 'path': 'FinalProjectAdrianMroczek.ipynb', 'repo_name': 'mroczek-adrian/PrzetwarzanieObrazowCyfrowych', 'size': '11845'}