# OpenCV ile alırsak resim numpy formatında olurimport cv2im = cv2.imread("abc.tiff",mode='RGB')print type(im)
def histogram_stretching(image: Image, new=(0, 255)):"""Histogram GermeArguments:image {PIL.Image} -- ResimKeyword Arguments:new {(min, max)} -- tuple (default: {(0, 255)})Returns:PIL.Image -- Gerilmiş resim"""def difference(variable: tuple):return variable[1] - variable[0]np_image = np.array(image) # Resmi numpy.ndarray formatına çevirmeflatten_img_np = np_image.reshape(-1) # Resmi tek boyuta indirgeme# Histogram germe denklemiold = flatten_img_np.min(), flatten_img_np.max()for i in range(0, len(flatten_img_np)):flatten_img_np[i] = (difference(new) / difference(old)) * \(flatten_img_np[i] - old[0]) + new[0]# Aynı boyutlardaki yeni resmi oluşturmareturn Image.fromarray(flatten_img_np.reshape(np_image.shape))
def histogram_equalization(image: Image):"""Histogram eşitlemeArguments:image {PIL.Image} -- ResimReturns:PIL.Image -- Resim"""np_image = np.copy(image) # Numpy formatına çevirmeflatten_image = np_image.flatten() # Resmi tek boyuta indirgeme# Pixel bilgilerini almapixel_num = len(flatten_image)max_pixel_num = flatten_image.max()min_pixel_num = flatten_image.min()# Pixel dağılımını hesaplamapixel_manager = {} # Pixel yönlendiricicumulative_probability = 0 # Kümülatif pixel bulunma olasılığıfor i in range(min_pixel_num, max_pixel_num + 1):pixel_count = 0 # Pixel'in tekrar etme sayısıfor pixel in flatten_image:if i == pixel:pixel_count += 1cumulative_probability += pixel_count / pixel_numpixel_manager[f'{i}'] = round(max_pixel_num * cumulative_probability)for i in range(len(flatten_image)):flatten_image[i] = pixel_manager[f"{flatten_image[i]}"]return Image.fromarray(flatten_image.reshape(np_image.shape))