当前位置: 首页 > news >正文

[图像处理]图像美化

本文介绍了图像处理中的颜色直方图、直方图均衡化、高斯均值滤波和中值滤波四种常用方法。颜色直方图通过统计RGB分量分布来表征图像颜色特征;直方图均衡化通过灰度变换增强图像对比度;高斯滤波采用加权平均方式实现平滑去噪;中值滤波则通过邻域像素排序取中值的方式有效消除椒盐噪声。每种方法都给出了代码实现示例,并分析了其原理、特点和应用场景,这些技术为图像增强和预处理提供了重要手段。

1. 彩色直方图

颜色直方图,指的是一幅图像中的颜色分布,与图像中的特定的物体无关,只是用来表示人的眼睛观察到的图像中的颜色分布情况,例如说,一幅图中红色占了多少比例,绿色占了多少比例等。

我们知道,计算机色彩显示器采用R、G、B相加混色的原理,通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。在RGB颜色空间中,任意色光F都可以用RGB三色不同分量的相加混合而成。也就是说,图像中每个像素的颜色值都可以用一个三元值(R,G,B)来表示,例如(0,0,0)表示黑色,(0,0,255)表示蓝色,……每个分量的大小从0~255.

那么,我们可以知道一张彩色图像可以由R、G、B三个通道堆叠而成。可以想象成将三张大小相同的纸叠放,然后人眼从上往下看到的图像就是原来的彩色图像。这里,假设图像的分辨率为320*240,那么每个通道的长为320,宽为240,单位是像素,总的像素个数就是3*320*240. 

def image_histogram(image_path):"""提取图像的直方图:param image: 图像路径:return: None"""image = cv2.imread(image_path, 1)# method 1: matplotlib to get histogramplt.hist(image.ravel(), 256)plt.show()# method 2: use opencv to get histogramhistb = cv2.calcHist([image], [0], None, [256], [0, 255])plt.plot(histb, color='b')plt.show()

2. 直方图均衡化

        图像的空域处理是一种重要的图像处理技术,这类方法直接以图像的像素操作为基础,主要分为灰度变换和空域滤波两大类,直方图均衡化(Histogram equalization)就是一种常用的灰度变换方法。通常,暗图像直方图的分量集中在灰度较低的一端,而亮图像直方图分量偏向于灰度较高的一端。

        如果一幅图像的灰度直方图几乎覆盖了整个灰度的取值范围,并且除了个别灰度值的个数较为突出,整个灰度值分布近似于均匀分布,那么这幅图像就具有较大的灰度动态范围和较高的对比度,同时图像的细节更为丰富。已经证明,仅仅依靠输入图像的直方图信息,就可以得到一个变换函数,利用该变换函数可以将输入图像达到上述效果,该过程就是直方图均衡化

        直方图均衡化就是将原始的直方图拉伸,使之均匀分布在全部灰度范围内,从而增强图像的对比度。直方图均衡化的中心思想是把原始图像的的灰度直方图从比较集中的某个区域变成在全部灰度范围内的均匀分布。旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点更均匀一点。

def balance_img_his(image_path):"""直方图均衡化:灰度直方图、彩色直方图、YUV直方图均衡化:return:"""src_img = cv2.imread(image_path, 1)# 灰度直方图均衡化gray_img = cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY)dist_img = cv2.equalizeHist(gray_img)img = cv2.cvtColor(gray_img, cv2.COLOR_BGR2RGB)dst = cv2.cvtColor(dist_img, cv2.COLOR_BGR2RGB)# # 彩色直方图均衡化# # 将图片分解成RGB 三通道,然后分别进行均衡化操作# b, g, r = cv2.split(src_img)# bH = cv2.equalizeHist(b)# gH = cv2.equalizeHist(g)# rH = cv2.equalizeHist(r)# # 合成均衡后的通道# dst = cv2.merge([bH, gH, rH])## img = cv2.cvtColor(src_img, cv2.COLOR_BGR2RGB)# dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)# plt绘制前后两张图片显示效果# 原图显示plt.figure(figsize=(14, 9), dpi=100)  # 设置绘图区域的大小和像素plt.subplot(121)  # 一行两列第一个plt.imshow(img)# 灰度 直方图均衡化plt.subplot(122)  # 一行两列第二个plt.imshow(dst)plt.show()

3. 高斯均值滤波

        滤波 :是信号和图像处理中基本的任务。其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息。过滤可以移除图像中的噪音、提取感兴趣的可视特征、允许图像重采样等等。频域分析 :将图像分成从低频到高频的不同部分。低频对应图像强度变化小的区域,而高频是图像强度变化非常大的区域。

        在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作。低通滤波器是消除图像中高频部分,但保留低频部分。高通滤波器消除低频部分。滤波(高通、低通、带通、带阻) 、模糊、去噪、平滑等。高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

def gauss_filter(image_path):src_img = cv2.imread(image_path, 1)dst_img = cv2.GaussianBlur(src_img, (5, 5), 1.5)src = cv2.cvtColor(src_img,cv2.COLOR_BGR2RGB)dst = cv2.cvtColor(dst_img, cv2.COLOR_BGR2RGB)plt.figure(figsize=(14, 6), dpi=100)plt.subplot(121)plt.imshow(src)plt.subplot(122)plt.imshow(dst)plt.show()

4. 中值滤波

4.1 中值滤波原理

        中值滤波基于排序统计理论,通过将每个像素点的灰度值替换为其邻域内所有像素点灰度值的中值,从而达到消除孤立噪声点的目的。这种方法能够让周围的像素值接近真实值,从而在消除噪声的同时保持图像的边缘特性,避免产生显著的模糊。


4.2 中值滤波的应用


中值滤波在图像处理领域具有广泛的应用,尤其适用于消除椒盐噪声和脉冲噪声。由于其对孤立噪声点的有效抑制,中值滤波在图像预处理阶段扮演着重要的角色。它可以帮助改善图像质量,为后续的图像分析和处理提供更好的基础。

4.3 中值滤波的实现方法


中值滤波一般采用模板的方法实现,通过在模板内对像素进行排序并选取中值来替代模板中心像素的值。具体实现步骤如下:

  1. 定义一个移动窗口(模板),确保窗口内包含奇数个像素点。常用的窗口大小有3x3、5x5、7x7等。
  2. 将模板中心与图像中的某个像素位置重合。
  3. 读取模板下各对应的像素灰度值,并进行排序。排序可以采用从小到大或从大到小的顺序。
  4. 选取排序后的灰度序列的中值。
  5. 将中值赋给模板中心位置的像素,完成滤波操作。
def middle_filter(image_path):img = cv2.imread(image_path, 1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)# cv2.imshow('src',img)dst = np.zeros((height, width, 3), np.uint8)collect = np.zeros(9, np.uint8)for i in range(1, height - 1):for j in range(1, width - 1):k = 0for m in range(-1, 2):for n in range(-1, 2):gray = img[i + m, j + n]collect[k] = grayk = k + 1# 0 1 2 3 4 5 6 7 8#   1for k in range(0, 9):p1 = collect[k]for t in range(k + 1, 9):if p1:mid = collect[t]collect[t] = p1p1 = middst[i, j] = collect[4]# cv2.imshow('dst',dst)# cv2.waitKey(0)img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)plt.figure(figsize=(14, 6), dpi=100)  # 设置绘图区域的大小和像素plt.subplot(121)  # 一行二列第一个plt.imshow(img)plt.subplot(122)  # 一行二列第二个plt.imshow(dst)plt.show()

http://www.dtcms.com/a/568424.html

相关文章:

  • windows10下用wsl2部署Ollama同时用docker部署nginx开放外网访问
  • Linux学习笔记(十一)--文件接口与重定向
  • Linux 自定义协议实现网络计算器
  • 【IC】NoC设计入门 --交换矩阵
  • 【NCCL】Merged Device(合并设备)和bond的区别
  • 网站后台栏目管理dede做双语网站
  • 怎么做淘客网站开网站供免费下载
  • 下载CUDA Toolkit和VS后,配置vscode
  • 零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
  • Elasticsearch从入门到实践:核心概念到Kibana测试与C++客户端封装
  • C++ 二叉堆
  • uniappx 开发微信小程序 腾讯地图偏移量计算
  • 湖南微信网站公司电子商务网站建设的方法
  • Linux 权限管理进阶:从 umask 到粘滞位的深度解析
  • 医疗小程序02用户注册
  • 北京网站搭建服务58网站怎么样做效果会更好
  • Android 图像显示框架三——演示demo以及解析
  • Python实用技巧:批量处理Excel数据并生成销售报表(含实战案例)
  • nodered 下载 excel 文件
  • Java: 如何在Excel中添加或删除分页符?
  • 处理wangEditor编辑器缩进问题
  • linux挂载系统盘[ubuntu22 2025年11月]
  • 如何修改Linux下screenfetch的默认ASCII 艺术logo ?
  • 用于 Liferay 的 ONLYOFFICE 连接器已更新至 3.1.0 版本:升级后的编辑器、图表查看器和更多支持的文件格式
  • 山东正元建设网站企业门户网站开发费用
  • 网站关键词优化的价格软件开发周期
  • 在 Windows 中基于 WSL 子系统 Ubuntu 安装配置 conda 示例
  • 怎么做饲料电商网站网络推广平台cpa
  • php网站本地搭建wordpress 密码 算法
  • 咖啡网站建设设计规划书公众号二次开发