按要求补全文件后面的那个代码
时间: 2024-12-20 11:29:22 浏览: 3
根据提供的文档内容,以下是完整的代码实现:
```python
from skimage import io, filters
from matplotlib import pyplot as plt
import numpy as np
import cv2
# 读取原图片
img = io.imread('/data/workspace/myshixun/step6/原图/boneScan.png', as_gray=True)
# 自定义图像空间滤波函数
def correl2d(img, window):
m = window.shape[0]
n = window.shape[1]
# 边界通过0灰度值来填充扩展
img1 = np.zeros((img.shape[0] + m - 1, img.shape[1] + n - 1))
img1[(m - 1) // 2:(img.shape[0] + (m - 1) // 2), (n - 1) // 2:(img.shape[1] + (n - 1) // 2)] = img
img2 = np.zeros(img.shape)
for i in range(img2.shape[0]):
for j in range(img2.shape[1]):
temp = img1[i:i + m, j:j + n]
img2[i, j] = np.sum(np.multiply(temp, window))
return img2
# Laplacian 算子模板
window = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]])
img_laplace = correl2d(img, window)
img_laplace = 255 * (img_laplace - img_laplace.min()) / (img_laplace.max() - img_laplace.min())
# Sobel 处理
img_sobel = filters.sobel(img)
# 使用5×5均值滤波器平滑后的Sobel图像
kernel = np.ones((5, 5)) / 25
img_sobel_mean = correl2d(img_sobel, kernel)
# 将img_laplace与img_sobel_mean相乘得到锐化结果
img_sharp = img_laplace * img_sobel_mean
# 将原始图像img与锐化图像img_sharp相加得到锐化增强图像
img_sharp_enhance = img + img_sharp
# 对img_sharp_enhance进行灰度幂律变换得到最终结果
gamma = 0.5
img_enhance = 255 * (img_sharp_enhance / 255) ** gamma
# 展示混合滤波后的图片
io.imsave('/data/workspace/myshixun/step6/学员文件/output.png', img_enhance)
# 等待用户的键盘输入
print(np.sum(img_enhance))
```
### 代码解释
1. **自定义图像空间滤波函数 `correl2d`**:
- 这个函数实现了二维卷积操作,用于不同的空域滤波。
- 输入参数是图像 `img` 和滤波窗口 `window`。
- 图像边界通过0灰度值来填充扩展,以保持输出图像大小不变。
2. **Laplacian 算子模板**:
- 定义了一个3x3的Laplacian算子模板,并应用于图像 `img`。
- 结果图像 `img_laplace` 经过归一化处理,使其像素值在0到255之间。
3. **Sobel 处理**:
- 使用 `skimage.filters.sobel` 函数对图像 `img` 进行边缘检测,得到 `img_sobel`。
4. **均值滤波器**:
- 定义一个5x5的均值滤波器,并将其应用于 `img_sobel`,得到平滑后的Sobel图像 `img_sobel_mean`。
5. **锐化处理**:
- 将 `img_laplace` 与 `img_sobel_mean` 相乘,得到锐化结果 `img_sharp`。
- 将原始图像 `img` 与锐化图像 `img_sharp` 相加,得到锐化增强图像 `img_sharp_enhance`。
6. **灰度幂律变换**:
- 对 `img_sharp_enhance` 进行灰度幂律变换,调整图像对比度,得到最终结果 `img_enhance`。
7. **保存和显示结果**:
- 将最终结果保存为图片文件 `output.png`。
- 打印图像的像素值总和,等待用户的键盘输入。
阅读全文