Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
4.4 kB
1
Indexable
Never
'''
img = Image.open('plain.tif')
cropped = img.crop((300, 0, 1324, 1024))
cropped.save('cropped_plain.tif')

# 1 вариант - 1 задание - Шум Рэлея"
cropped_array = np.array(cropped.getdata()).reshape(cropped.size[0], cropped.size[1])

print(cropped_array.shape)
noise = scipy.stats.rayleigh.rvs(scale = 100, size = cropped_array.shape)
noisy_image = noise + cropped
plt.imshow(noisy_image, cmap = 'gray')
plt.imsave('шум Рэлея.png', noisy_image, cmap = 'gray')
plt.hist(noisy_image, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
plt.show()


# 2 задание - Импульсный шум типа перец
def add_noise(im):
    row, col = im.shape
    number_of_pixels = random.randint(1024, 1024*1024)
    for i in range(number_of_pixels):
        y_coord=random.randint(0, row - 1)
        x_coord=random.randint(0, col - 1)
        im[y_coord][x_coord] = 0
    return im
im = add_noise(np.array(img))
image1 = Image.fromarray(im)
plt.imsave('шум перец.png', image1, cmap = 'gray')
image1.show()

plt.hist(im.ravel(), bins=256, range=(0, 255))
plt.show()
# 3 задание - фильтр максимума
from PIL import ImageFilter

IM2 = image1.filter(ImageFilter.MaxFilter(size=3))
plt.imsave('фильтр максимума.png', IM2, cmap = 'gray')
IM2.show()
#построим разность изображений
raznost =Image.fromarray(np.array(img)-np.array(IM2))
plt.imsave('разность изображений.png', raznost, cmap = 'gray')
raznost.show()

# 4 задание
def calculate_2dft(input):
    ft = np.fft.ifftshift(input)
    ft = np.fft.fft2(ft)
    return np.fft.fftshift(ft)

def calculate_2dift(input):
    ift = np.fft.ifftshift(input)
    ift = np.fft.ifft2(ift)
    ift = np.fft.fftshift(ift)
    return ift.real


image_1_core = plt.imread("plain.tif")
core_image = image_1_core.copy()
image_2 = pn.read_excel('im1.xlsx', sheet_name='Sheet1')
image_1 = image_2.copy()
image = image_1.to_numpy()
print(image.shape)

ft_image = calculate_2dft(image)
plt.imshow(np.log(1 + np.abs(ft_image)))
#plt.show()
l, m = ft_image.shape
for i in range(l):
    for j in range(m):
        if (i - 705)**2 + (j - 800)**2 <= 400 or (i - 495)**2 + (j - 800)**2 <= 400:
            ft_image[i][j] = np.complex128(0)
plt.imshow(np.log(1 + np.abs(ft_image)))
new_image = calculate_2dift(ft_image)
#plt.imshow(new_image, cmap='gray')
#plt.imshow(abs(image_2 - new_image), cmap = 'gray')
plt.hist(image, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
plt.show()
'''
# ЛАБА 2
'''
# ЗАДАНИЕ 1 (ПАЛИТРА)
rgb_image = cv2.imread('Palitra.png')
# переход от RGB к HSI
hsi_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2HSV)
cv2.imshow("Original Image", rgb_image)
cv2.imshow("HSV Image", hsi_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
#В области цветового тона изменить красную и зелёную область на максимальное значение цветовой области
for i in range(rgb_image.shape[0]):
    for j in range(rgb_image.shape[1]):
        if np.all((rgb_image[i][j] == [0, 0, 255])) or np.all((rgb_image[i][j] == [0, 255, 0])):
            hsi_image[i][j][0] = 255
cv2.imshow("red/green", hsi_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
#Насыщенность пурпурной области  уменьшить вдвое по сравнению с первоначальным значением
for i in range(rgb_image.shape[0]):
    for j in range(rgb_image.shape[0]):
        if np.all(rgb_image[i][j] == [255, 0, 255]):
            hsi_image[i][j][1] /= 2
cv2.imshow("purpur", hsi_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
#Интенсивность в белой области в центре уменьшить вдвое
for i in range(rgb_image.shape[0]):
    for j in range(rgb_image.shape[0]):
        if np.all(rgb_image[i][j] == [255, 255, 255]):
            hsi_image[i][j][2] /= 2
cv2.imshow("saturation of white in the center /2", hsi_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
#Осуществить обратный переход
res_image = cv2.cvtColor(hsi_image, cv2.COLOR_HSV2RGB)
cv2.imshow("back_to_original", res_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
Leave a Comment