Реализация градационных алгоритмов обработки изображения

Лабораторная_img_2.pdf (182.8 КБ)
Помогите пожалуйста реализовать пункт Кусочно-линейное преобразование с задаваемыми узловыми
точками (r1,s1),(r2,s2)

import cv2
import numpy as np
from google.colab import drive
drive.mount("/content/drive")
img=cv2.imread('./drive/MyDrive/python/lab 2/sun.jpg')
#задание 1 логарифмическое преобразование
img[img==255]=254 # делаем такое преобразование, чтобы 0 не попал под логарифм
img2=np.asarray(np.rint(255*np.log(1+img)/np.log(255)),dtype=np.uint8)
cv2.imwrite('./drive/My Drive/python/lab 2/sun_log.jpg',img2)#результат логарифмического преобразования
#задание 2 переход к негативу
img3=np.asarray(np.rint(255-img),dtype=np.uint8)#переход к негативу
cv2.imwrite('./drive/My Drive/python/lab 2/sun_negative.jpg',img3)#результат перехода негатива
#Для различных значений параметра применить степенное преобразование
Y=float(input("enter Y="))
if 0<Y<1:
  print("параметр γ →0, то результирующее изображение будет становитьсявсе светлее и светлее")
elif 1<Y<2:
  print("При γ>1в области черного цвета будет наблюдаться понижение контрастности, а в области белого цвета – ее увеличение.")
elif Y>1:
  print("параметр γ →+∞, то изображения будут темнеть, превращаясь в пределе в черное.")
else:
  print("данный случай не рассматривается!")
img4=np.asarray(np.rint(pow(img,Y)/pow(255,Y-1)),dtype=np.uint8)#переход к негативу
cv2.imwrite('./drive/My Drive/python/lab 2/sun_stepen.jpg',img4)
#Кусочно-линейное преобразование с задаваемыми узловыми точками (r1,s1),(r2,s2)
r1=float(input("enter r1="))
r2=float(input("enter r2="))
s1=float(input("enter s1="))
s2=float(input("enter s2="))
for r in range(0,255):
  if 0<=r<=r1:
    s_1=np.asarray(np.rint(s1/r1),dtype=np.uint8)
    cv2.imwrite('./drive/My Drive/python/lab 2/s_1.jpg',s_1)

Помочь как, что именно не получается?

реализовать пункт кусочно-линейное преобразование с задаваемыми узловыми
точками (r1,s1),(r2,s2), не получается пройти циклом for по всему изображению и как сделать так, чтобы переменная r отвечала за один из компонентов пикселя?

попробуй через функцию

def func (r):

  if 0 <= r <= ro1:

    return (s1 // ro1) * r

  elif ro1 <= r <= ro2:

    return (s2 - s1) // (ro2 - ro1) * (r - ro1) + s1

  elif ro2 <= r <= 255:

    return (255 - s2) // (255 - ro2) * (r - ro2) + s2