Untitled

 avatar
unknown
python
2 years ago
5.6 kB
0
Indexable
def integral_image(img):
    # Your implementation of integral image
    pass


def sum_image(image):
    # Your implementation for summing up pixels
    pass


def task1():
    # Your implementation of Task1
    pass
# ************************************************
# ********************TASK2***********************
def equalize_hist_image(img):
    # Your implementation of histogram equalization
    pass


def task2():
    # Your implementation of Task2
    pass
# ************************************************
# ********************TASK4***********************
def get_kernel(sigma):
    # Your implementation of getGaussianKernel
    pass


def task4():
    
    pass
# ************************************************
# ********************TASK5***********************
def task5():
    img = cv.imread("bonn.png")
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    cv2_imshow(gray)
    blur1 = cv.GaussianBlur(gray,(5,5),2)
    blur2 = cv.GaussianBlur(gray,(5,5),2*math.sqrt(2))
    cv2_imshow(blur1)
    cv2_imshow(blur2)
# ************************************************
# ********************TASK7***********************
def add_salt_n_pepper_noise(img):
    numbers = [0, 1, 255]
    distributions = [0.15, 0.7, 0.15]
    cells = np.shape(img)[0]*np.shape(img)[1]
    random_number = random.choices(numbers, distributions,k=cells)
    counter = 0
    res = np.empty(np.shape(img))
    for row in range(0,np.shape(img)[0]):
      for pixels in range(0,np.shape(img)[1]):
        if random_number[counter] == 0:
          img[row][pixels] = 0
        elif random_number[counter] == 255:
          img[row][pixels] = 255
        else :
          res[row][pixels] = img[row][pixels]
        counter+=1
    return img
    

def calculateDistance(i1, i2):
    #print(np.sum((i1-i2)**2)/(np.shape(i1)[0]*np.shape(i1)[1]))
    return math.sqrt(np.sum((i1-i2)**2)/(np.shape(i1)[0]*np.shape(i1)[1]))

def task7():
    img_salt_pepper = add_salt_n_pepper_noise(cv.cvtColor(cv.imread("bonn.png"), cv.COLOR_BGR2GRAY))
    
    img = cv.imread("bonn.png")
    
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    filter_range = [1,3,5,7,9]
    
    best_gauss_range = 0
    best_median_range = 0
    best_bilateral_range = 0
    
    gauss_dis = 10000
    median_dis = 10000
    bilateral_dis = 10000
    
    for i in filter_range:
      if calculateDistance(gray,cv.GaussianBlur(img_salt_pepper,(i,i),3)) < gauss_dis:
        gauss_dis = calculateDistance(gray,cv.GaussianBlur(img_salt_pepper,(i,i),3))
        #print(str(i) + " "+str(calculateDistance(gray,cv.GaussianBlur(img_salt_pepper,(i,i),2))))
        best_gauss_range = i
      
      if calculateDistance(gray,cv.medianBlur(img_salt_pepper, i)) < median_dis:
        median_dis = calculateDistance(gray,cv.medianBlur(img_salt_pepper, i))
        best_median_range = i
      
      if calculateDistance(gray,cv.bilateralFilter(img_salt_pepper,i,150,150)) < bilateral_dis:
        bilateral_dis = calculateDistance(gray,cv.bilateralFilter(img_salt_pepper,i,150,150))
        best_bilateral_range = i
    
    cv2_imshow(gray)
    cv2_imshow(img_salt_pepper)
    
    print("best gauss range is " + str(best_gauss_range))
    
    cv2_imshow(cv.GaussianBlur(img_salt_pepper,(best_gauss_range,best_gauss_range),1))

    print("best median range is " + str(best_median_range))
    
    #print("damn" +str(calculateDistance(gray,cv.medianBlur(img_salt_pepper, 5))))
    # cv2_imshow(cv.medianBlur(img_salt_pepper, 3))
    #cv2_imshow(gray)
    
    cv2_imshow(cv.medianBlur(img_salt_pepper, best_median_range))

    print("best bilateral range is " + str(best_bilateral_range))
    
    cv2_imshow(cv.bilateralFilter(img_salt_pepper,best_bilateral_range,150,150))
      
    #cv2_imshow(gray)
    

# ************************************************
# ********************TASK8***********************
def task8():
    img = cv.imread("bonn.png")
    
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    k1 = np.array([[0.0113,0.0838,0.0113],[0.0838,0.6193,0.0838],[0.0113,0.0838,0.0113]])
    k2 = np.array([[-0.8984,0.1472,1.1410],[-1.9075,0.1566,2.1359],[-0.8659,0.0573,1.0337]])
    filter1 = cv.filter2D(gray,-1,k1)
    filter2 = cv.filter2D(gray,-1,k2)
    print("gray image")
    cv2_imshow(gray)
    print("image filtered by k1")
    cv2_imshow(filter1)
    print("image filtered by k2")
    cv2_imshow(filter2)
    
    u1,s1,v1 = cv.SVDecomp(k1)
    u2,s2,v2 = cv.SVDecomp(k2)
    
    filter1_decomposed = cv.filter2D(cv.filter2D(gray,-1,u1[:,:1]),-1,v1[0])
    filter2_decomposed = cv.filter2D(cv.filter2D(gray,-1,u2[:,:1]),-1,v2[0])
    
    print("image filtered by decomposed k1")
    cv2_imshow(filter1_decomposed)

    print("image filtered by decomposed k2")
    cv2_imshow(filter2_decomposed)

    print("mean pixel wise diffrence squared between filter 1 and gray image is =  " + str(calculateDistance(gray, filter1)))
    print("mean pixel wise diffrence squared between filter 1 decomposed and gray image is =  " + str(calculateDistance(gray, filter1_decomposed)))

    print("mean pixel wise diffrence squared between filter 2 and gray image is =  " + str(calculateDistance(gray, filter2)))
    print("mean pixel wise diffrence squared between filter 2 decomposed and gray image is =  " + str(calculateDistance(gray, filter2_decomposed)))

    #Sigma = np.zeros((k1.shape[0], k1.shape[1]))
     
    #Sigma[:k1.shape[1], :k1.shape[1]] = np.diag(s)
    #print(np.linalg.svd(k2))
Editor is loading...