3.操作题 (1)读取图像“15_noise.png”,转化为灰度图,并显示图像。 (2)去除图像“15_noise.png”中的椒盐噪声,并将图像旋转30°显示。(3)用双线性插值法将图像“15.png”放大1.2倍后,对图像进行梯度锐化。
时间: 2024-10-18 20:19:18 浏览: 22
这些是针对图像处理的一些基本操作任务,下面是每个任务的简单解释和Python代码示例(假设你已经安装了相关的图像处理库,比如PIL和OpenCV):
**(1)读取图像、转为灰度并显示**
```python
from PIL import Image
# 读取图像
img = Image.open("15_noise.png")
# 转换为灰度图
gray_img = img.convert('L')
# 显示图像
gray_img.show()
```
**(2)去除椒盐噪声并旋转图像**
椒盐噪声的去除可以通过简单的二值化(例如阈值处理)或者更复杂的滤波方法(如形态学变换),这里假设我们使用OpenCV中的降噪方法:
```python
import cv2
# 读取图像并转换为OpenCV格式
img_cv = cv2.imread("15_noise.png", cv2.IMREAD_GRAYSCALE)
# 假设这里使用otsu's thresholding去除椒盐噪声
clean_img = cv2.threshold(img_cv, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 旋转图像(逆时针)
rotated_img = cv2.rotate(clean_img, cv2.ROTATE_90_COUNTERCLOCKWISE)
# 显示旋转后的图像
cv2.imshow("Rotated Image", rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
**(3)双线性插值放大图像并锐化梯度**
```python
import cv2
import numpy as np
# 读取原始图像
original_img = cv2.imread("15.png")
# 双线性插值放大1.2倍
resized_img = cv2.resize(original_img, None, fx=1.2, fy=1.2, interpolation=cv2.INTER_LINEAR)
# 对图像进行梯度锐化,这里使用Sobel算子
grad_x = cv2.Sobel(resized_img, cv2.CV_8U, 1, 0, ksize=3, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)
grad_y = cv2.Sobel(resized_img, cv2.CV_8U, 0, 1, ksize=3, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)
gradient_magnitude = np.sqrt(np.square(grad_x) + np.square(grad_y))
gradient_orientation = np.arctan2(grad_y, grad_x)
# 将梯度转换回原尺寸
sharp_img = cv2.resize(gradient_magnitude, original_img.shape[:2], interpolation=cv2.INTER_LINEAR)
# 显示结果
cv2.imshow("Sharpened Image", sharp_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意:实际操作时,根据不同的噪声类型和效果需求,上述代码中的去噪和锐化部分可能需要调整参数。
阅读全文