目录
一、题目
1、问题描述
2、问题分析
二、实验过程
1、中值滤波
2、分段线性变换
3、图像增强
三、实验结果
四、代码
一、题目
1、问题描述
对于下面这幅图像,请问可以通过那些图像增强的手段,达到改善视觉效果的目的?请显示处理结果,并附简要处理流程说明。
2、问题分析
若想改善图片的质量,我们需要去除其中的噪声。图片轮廓不清晰,我们将其锐化即可。
下面简单介绍一下处理过程中遇到的问题及解决方法:
问题 | 解决方法 |
噪声 | 中值滤波 |
各地区颜色不分明,模糊 | 分段线性变换 |
边界不清晰,棱角不分明 | 图像锐化 |
二、实验过程
1、中值滤波
(1)函数
medianblur(src , dst , size)
(2)参数说明
src:表示原始图像
dst:表示处理后的图像
size:孔径线性尺寸(必须是大于1的奇数)
(3)函数功能
使用中值滤波来平滑图像,图像去噪
2、分段线性变换
(1)函数
SLT(image, x1, x2, y1, y2)
(2)参数说明
Image : 原始图像
(3)函数功能
使图像有更好的目视效果或突出有用的信息,提高图像质量和突出所需信息
3、图像增强
(1)函数
filter2d(img_path)
(2)参数说明
img_path: 输入图片路径
(3)函数功能
是使图像边缘更清晰的一种图像处理方法
三、实验结果
1、灰度图
2、中值滤波
3、分段线性变换
4、图像锐化
5、效果对比图
四、代码
1、medianBlur.py
import cv2
# 读取图片
img = cv2.imread('img0.png')
pre_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 中值滤波
img1 = cv2.medianBlur(img,3)
# 显示并保存图片
cv2.imshow('pre_img',img)
cv2.imshow('medianBlur',img1)
cv2.imwrite('img1.jpg', img1)
cv2.waitKey(0)
2、SLT.py
import numpy as np
import cv2 as cv2
# 读取图片
img = cv2.imread('img1.jpg')
pre_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
def SLT(img, x1, x2, y1, y2):
lut = np.zeros(256)
for i in range(256):
if i < x1:
lut[i] = (y1 / x1) * i
elif i < x2:
lut[i] = ((y2 - y1) / (x2 - x1)) * (i - x1) + y1
else:
lut[i] = ((y2 - 255.0) / (x2 - 255.0)) * (i - 255.0) + 255.0
img2 = cv2.LUT(img, lut)
img2 = np.uint8(img2 + 0.5)
return img2
# 分段线性变换
img2 = SLT(img, 80, 150, 50, 230)
# 显示并保存图片
cv2.imshow('SLT', img2)
cv2.imwrite('img2.jpg', img2)
cv2.waitKey(0)
3、filter2d.py
import cv2 as cv2
import numpy as np
# 读取图像
img = cv2.imread('img1.jpg')
pre_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img0 = cv2.imread('img0.png')
img0 = cv2.cvtColor(img0, cv2.COLOR_BGR2RGB)
def filter2d(img_path):
kernel = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
img3 = cv2.filter2D(img, -1, kernel)
return img3
# 图像锐化
img3 = filter2d(img)
merge = np.hstack((img0,img3))
# 显示并保存图像
cv2.imshow('filter2D', img3)
cv2.imwrite('img3.jpg',img3)
cv2.imshow('merge',merge)
cv2.imwrite('merge.jpg',merge)
cv2.waitKey(0)