栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【图像处理】改善图像质量

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【图像处理】改善图像质量

改善图像质量

1 处理流程

图像中有明显的胡椒噪声,并且整体亮度偏暗。

  • 采用5*5大小的最大值滤波 消除胡椒噪声
  • 采用8*8的划分对图像进行自适应直方图均衡
  • 5*5大小的中值滤波
  • 对所得图像进行灰度指数级变换,gamma = 0.8
2 代码实践

利用python在jupyter notebook实现。

2.1 导入需要的包
import cv2
import numpy as np
import matplotlib.pyplot as plt
import copy
%matplotlib inline
2.2 读取待处理 图像并显示
img = cv2.imread("lina.png")
plt.imshow(img,cmap=plt.get_cmap('gray'))

2.3 查看直方图分布
plt.hist(img.ravel(),256)
plt.show()

2.4 定义最大值滤波函数
import cv2 as cv
import numpy as np
import copy

def original(i, j, k, ksize, img):
    # 找到矩阵坐标
    x1 = y1 = -ksize // 2
    x2 = y2 = ksize + x1
    temp = np.zeros(ksize * ksize)
    count = 0
    # 处理图像
    for m in range(x1, x2):
        for n in range(y1, y2):
            if i + m < 0 or i + m > img.shape[0] - 1 or j + n < 0 or j + n > img.shape[1] - 1:
                temp[count] = img[i, j, k]
            else:
                temp[count] = img[i + m, j + n, k]
            count += 1
    return temp

# 自定义最大值滤波器最小值滤波器
def max_min_functin(ksize, img, flag):
    img0 = copy.copy(img)
    for i in range(0, img.shape[0]):
        for j in range(2, img.shape[1]):
            for k in range(img.shape[2]):
                temp = original(i, j, k, ksize, img0)
                if flag == 0:
                    img[i, j, k] = np.max(temp)
                elif flag == 1:
                    img[i, j, k] = np.min(temp)
    return img

max_img = max_min_functin(5, copy.copy(img),0)
plt.imshow(max_img)


经过最大值滤波很好的消除了胡椒噪声

2.5 定义自适应直方图均衡函数
def adp_histeq(img,clip,size):
    equ = cv2.equalizeHist(img)  #直接进行直方图均衡
    clahe = cv2.createCLAHE(2.0,(size,size))
    res_clahe = clahe.apply(img)
    res = np.hstack((img,equ,res_clahe))
    return equ,res_clahe

进行自适应直方图均衡,得到结果。

equ,clahe = adp_histeq(max_img[:,:,1],40,8)
plt.imshow(clahe,cmap=plt.get_cmap('gray'))

2.6 中值滤波
blur_img = cv2.medianBlur(clahe,5)
plt.imshow(blur_img,cmap=plt.get_cmap('gray'))

2.7 指数变换
power_img = np.power(blur_img,0.8)
plt.imshow(power_img,cmap=plt.get_cmap('gray'))


得到最终结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009239.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号