python编写代码读出一幅灰度图像("lena_gray.gif"),采用 3×3 拉普拉斯算子 𝑤=[1,1,1;1,−8,1;1,1,1] 对其进行滤波
时间: 2023-10-02 21:07:05 浏览: 90
可以这样编写代码:
```python
from PIL import Image
import numpy as np
# 读入图像
im = Image.open('lena_gray.gif')
im_arr = np.array(im)
# 定义拉普拉斯算子
w = np.array([[1, 1, 1],
[1, -8, 1],
[1, 1, 1]])
# 图像滤波
filtered = np.zeros_like(im_arr)
for i in range(1, im_arr.shape[0] - 1):
for j in range(1, im_arr.shape[1] - 1):
filtered[i][j] = np.sum(w * im_arr[i-1:i+2, j-1:j+2])
if filtered[i][j] < 0:
filtered[i][j] = 0
elif filtered[i][j] > 255:
filtered[i][j] = 255
# 显示滤波后的图像
Image.fromarray(filtered.astype(np.uint8)).show()
```
这段代码会读入lena_gray.gif图像,并采用3x3拉普拉斯算子对其进行滤波,滤波后的图像会显示在屏幕上。
相关问题
读出一幅灰度图像("lena_gray.gif"),给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中
好的,以下是使用Python代码实现你的要求:
```
import cv2
import numpy as np
# 读入灰度图像lena_gray.gif
img = cv2.imread('lena_gray.gif', cv2.IMREAD_GRAYSCALE)
# 添加椒盐噪声
pepper_salt_noise = np.copy(img)
pepper_salt_noise[img < 30] = 0
pepper_salt_noise[img > 225] = 255
pepper_salt_noise = np.uint8(pepper_salt_noise)
# 添加高斯噪声
gaussian_noise = np.copy(img)
cv2.randn(gaussian_noise, 0, 10)
gaussian_noise = cv2.add(gaussian_noise, img)
gaussian_noise = np.uint8(gaussian_noise)
# 在同一图像窗口中显示三张图片
cv2.imshow('lena_gray.gif, pepper_salt_noise, gaussian_noise', np.hstack([img, pepper_salt_noise, gaussian_noise]))
cv2.waitKey()
cv2.destroyAllWindows()
```
注意:此处只是提供代码,可能无法对图像进行路径的读取,请修改代码中的文件路径以适应你的环境。
用matlab读取lena_gray.tif 图像,然后使用prewitt 算子对图像进行锐化,同屏显示原图像和锐化后图像
好的,以下是实现的代码:
```matlab
% 读取图像
lena = imread('lena_gray.tif');
% 显示原图像
subplot(1,2,1);
imshow(lena);
title('Original Image');
% 使用Prewitt算子进行锐化
prewitt_filter = [-1,-1,-1;0,0,0;1,1,1];
lena_prewitt = imfilter(double(lena), prewitt_filter);
% 显示锐化后图像
subplot(1,2,2);
imshow(lena_prewitt, []);
title('Sharpened Image (Prewitt)');
```
运行以上代码,即可在同一画布上显示原图像和使用Prewitt算子锐化后的图像。
阅读全文