彩色图像处理之彩色图像直方图处理的python实现——数字图像处理

这篇具有很好参考价值的文章主要介绍了彩色图像处理之彩色图像直方图处理的python实现——数字图像处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

彩色图像的直方图处理是一种重要的图像处理技术,用于改善图像的视觉效果,增强图像的对比度,或为后续的图像处理任务(如图像分割、特征提取)做准备。彩色图像通常由红色(R)、绿色(G)、蓝色(B)三个颜色通道组成,因此彩色图像的直方图处理相比单色图像更为复杂。

直方图的构建:

首先,对于彩色图像的每个颜色通道(R、G、B),分别计算其直方图。直方图是一个图表,显示了每个像素强度值(通常是0-255)在图像中出现的频率。
对于每个通道,直方图将有256个可能的强度值(或“桶”),每个桶的高度表示该强度值在相应通道中出现的次数。
直方图均衡化:

直方图均衡化是一种常见的彩色图像直方图处理方法,目的是增强图像的全局对比度。
在这个过程中,对每个颜色通道的直方图进行变换,使得最终的输出图像的直方图具有大致均匀的分布。这意味着在调整后的图像中,每个强度值的像素大致相同。
这种方法特别适用于图像的背景和前景都很暗或者都很亮的情况。
直方图规定化(匹配):

直方图规定化是另一种方法,它涉及修改一个图像的直方图以匹配另一个特定图像的直方图。
这通常用于标准化不同图像的光照条件,或者在特定应用中使图像风格一致。
局部直方图处理:

除了对整个图像进行直方图处理,还可以对图像的局部区域进行处理,以增强局部对比度或特定区域的细节。
颜色空间转换:

在进行直方图处理之前,有时会将图像从RGB颜色空间转换到其他颜色空间,如HSV(色相、饱和度、亮度)或YCbCr,因为在这些颜色空间中进行处理有时会得到更好的视觉效果或更符合特定应用的需求。
彩色图像直方图处理的关键在于理解和操作图像的颜色分布,以及如何通过调整这些分布来改善图像的整体或局部视觉质量。正确应用这些技术可以显著提升图像的视觉效果和适用性。

代码实现下图

彩色图像处理之彩色图像直方图处理的python实现——数字图像处理,图像处理,python,计算机视觉,人工智能,opencv,图像处理

提示

结果图显示了分别对R、G、B分量进行直方图均衡和将原图转换到HSI空间后保留H、S不变,只对I分量进行直方图均衡的结果。
图像分量的分离和合并可以用cv2.split和cv2.merge函数实现,直方图均衡仍然用cv2.equalizeHist函数实现。
由于cv2.equalizeHist规定参数必须是uint8类型的,所以得到[0,1]范围内的I分量后还需将其转换到[0,255]范围内并进行类型转换I_uint8 = (I*255).astype(np.uint8)后再进行直方图均衡。最后,将未改变的H、S分量和均衡后的I分量合并并转换为R、G、B分量。

python代码

import cv2
import numpy as np
import math
from matplotlib import pyplot as plt

# RGB转HSI,输入的三分量值域范围为[0,255],输出均在[0,1]之间
def RGB2HSI(r, g, b):
    r = r / 255
    g = g / 255
    b = b / 255

    num = 0.5 * ((r-g) + (r-b))
    den = ((r-g) ** 2 + (r-b) * (g-b)) ** 0.5
    h = math.acos(num / (den+1e-10))
    if b > g:
        h = 2*np.pi - h

    s = 1 - 3*min(r, g, b) / (r+g+b+1e-10)
    i = (r+g+b) / 3

    h = h / (2*np.pi)
    return h, s, i

# HSI转RGB,输入和输出的值域范围均为[0,1]
def HSI2RGB(h, s, i):
    h = h * 2 * np.pi

    if h < 2*np.pi/3:
        b = i * (1 - s)
        r = i * (1 + s * math.cos(h) / math.cos(np.pi/3 - h))
        g = 3*i - (b+r)
    elif h < 4*np.pi/3:
        r = i * (1 - s)
        g = i * (1 + s * math.cos(h - 2*np.pi/3) / math.cos(np.pi - h))
        b = 3 * i - (r + g)
    else:
        g = i * (1 - s)
        b = i * (1 + s * math.cos(h - 4*np.pi/3) / math.cos(5*np.pi/3 - h))
        r = 3 * i - (g + b)

    return r, g, b

img = cv2.imread('Fig0637.tif')

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
rows = img.shape[0]
cols = img.shape[1]

# 分别对R,G,B三个分量执行直方图均衡
(R, G, B) = cv2.split(img)
R_equ = cv2.equalizeHist(R)
G_equ = cv2.equalizeHist(G)
B_equ = cv2.equalizeHist(B)
img1 = cv2.merge([R_equ, G_equ, B_equ])

# RGB空间转换到HSI空间
H = np.zeros((rows, cols))
S = np.zeros((rows, cols))
I = np.zeros((rows, cols))

for x in range(rows):
    for y in range(cols):
        r, g, b = img[x, y, :]
        H[x, y], S[x, y], I[x, y] = RGB2HSI(r, g, b)

# 将强度分量I转换到[0,255]范围内再进行直方图均衡
I_uint8 = (I*255).astype(np.uint8)
# hist = cv2.calcHist([I_uint8], [0], None, [256], [0, 256])
# plt.subplot(1,2,1)
# plt.plot(hist)
I_equ = cv2.equalizeHist(I_uint8)
# hist_equ = cv2.calcHist([I_equ], [0], None, [256], [0, 256])
I_equ = I_equ / 255
# plt.subplot(1,2,2)
# plt.plot(hist_equ)
# plt.show()

# 保持色调H和饱和度S不变,结合均衡化后的强度I,转回RGB空间
R_new = np.zeros((rows, cols))
G_new = np.zeros((rows, cols))
B_new = np.zeros((rows, cols))

for x in range(rows):
    for y in range(cols):
        h = H[x, y]
        s = S[x, y]
        i = I_equ[x, y]
        # i = I[x, y]
        R_new[x, y], G_new[x, y], B_new[x, y] = HSI2RGB(h, s, i)

#R_new = (255*(R_new-R_new.min())/(R_new.max()-R_new.min())).astype(np.uint8)
#G_new = (255*(G_new-G_new.min())/(G_new.max()-G_new.min())).astype(np.uint8)
#B_new = (255*(B_new-B_new.min())/(B_new.max()-B_new.min())).astype(np.uint8)
img2 = cv2.merge([R_new, G_new, B_new])
img2 = np.clip(img2, 0, 1)

plt.subplot(1, 3, 1)
plt.imshow(img)
plt.axis('off')
plt.title('orig zzinal')

plt.subplot(1, 3, 2)
plt.imshow(img1)
plt.axis('off')
plt.title('RGB_hist_equ')

plt.subplot(1, 3, 3)
plt.imshow(img2)
plt.axis('off')
plt.title('I_hist_equ')

plt.show()

结果展示

彩色图像处理之彩色图像直方图处理的python实现——数字图像处理,图像处理,python,计算机视觉,人工智能,opencv,图像处理

总结

在灰度图像处理中,直方图均衡化自动地确定一种变换,改变换试图产生具有均匀灰度的直方图。由于彩色图像是由多个分量组成的,所以必须考了适应多于一个分量的直方图的灰度级技术。独立地进行彩色图像分量的直方图均衡通常是不可取的,这将产生不正确的彩色。一个更符合逻辑的方法是均匀地扩展彩色强度,而保留彩色本身。
图像直方图是反映一个图像像素分布的统计表,其横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。直方图的显示方式是左暗又亮,左边用于描述图像的暗度,右边用于描述图像的亮度。文章来源地址https://www.toymoban.com/news/detail-817865.html

到了这里,关于彩色图像处理之彩色图像直方图处理的python实现——数字图像处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (数字图像处理MATLAB+Python)第五章图像增强-第二节:基于直方图修正的图像增强

    基于直方图修正的图像增强 :是一种常见的图像处理方法。该方法通过对图像的像素值分布进行调整,以改善图像的对比度和亮度等视觉效果。具体地,直方图校正方法将图像的像素值转换为一个新的值域范围,使得像素值的分布更加均匀,从而增强图像的细节和对比度。这

    2023年04月19日
    浏览(57)
  • Python遥感图像处理应用篇036:GDAL+Scikit-image计算遥感图像梯度直方图HOG

    方向梯度直方图HOG(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功

    2024年02月11日
    浏览(49)
  • 【数字图像处理】直方图均衡化

    直方图均衡化是一种常见的图像增强方法,可以增强图像的对比度。其数学原理如下: 首先,我们需要了解直方图的概念。直方图是对图像像素分布的一种统计,它将每个像素值出现的次数记录下来,并以图形的方式呈现出来。在一幅图像中,像素值的范围通常是有限的。例

    2023年04月13日
    浏览(58)
  • 【MATLAB图像处理】直方图均衡化

    直方图均衡化有以下几个好处: 增强图像对比度:直方图均衡化可以通过重新分配像素值来增强图像的对比度。这可以使得图像中的细节更加清晰可见,从而提高图像的质量和可读性。 均衡化图像亮度:直方图均衡化可以将图像的亮度均衡化,使得图像的整体亮度更加均匀

    2024年02月08日
    浏览(43)
  • 【matlab图像处理】图像直方图操作和matlab画图

    中国史之【平王东迁】: 公元前771年,因镐京曾遭地震,残破不堪,又接近戎、狄等外患威胁,周平王遂在郑、秦、晋等诸侯的护卫下,将国都东迁至洛邑,东周历史由此开始。 ——来源:全历史APP 【路漫漫其修远兮,吾将上下而求索】 今天介绍图像的直方图操作以及用

    2024年02月04日
    浏览(43)
  • 我在Vscode学OpenCV 图像处理五(直方图处理)

    直方图是一种统计图,显示了图像中每个灰度级别(或颜色通道)的像素数量。通过分析图像的直方图,可以获得关于图像对比度、亮度和颜色分布等方面的重要信息。 了解图像的对比度、亮度和色彩分布等信息。你可以使用OpenCV中的函数来计算和绘制图像的直方图,从而进

    2024年01月21日
    浏览(77)
  • FPGA图像处理仿真实验——直方图均衡化

    直方图均衡化实验,主要包括三部分,直方图统计、计算累加直方图、均衡化。 1、直方图统计        直方图统计就是记录每个灰度值在图片中出现的像素次数,灰度图片有0-255个灰度级,如果我们定义256个寄存器来存储数据比较麻烦,所以借用RAM来实现直方图统计。当输入

    2024年02月07日
    浏览(57)
  • 【数字图像处理】直方图均衡化与规定化

    目录 直方图处理技术概述 直方图均衡化 公式推导  Matlab代码实现 图像的规定化 数学推导 单映射 Matlab代码 效果展示​编辑  组映射 Matlab代码 灰度级范围[0,L-1]的数字图像,在实际使用中,用哥灰度级的像素总数除以MN的整幅图像的像素数量,归一化到规律中进行计算,这样

    2023年04月26日
    浏览(42)
  • 数字图像处理实验(直方图均衡化&规定化)

    图像均衡化   图像均衡化是一种图像处理技术,它的目的是改善图像的对比度。   具体来说,对于一张图像,其直方图就是统计图像中各灰度级出现的次数的图像。通常情况下,图像的直方图会呈现不平衡的状态,即图像的某些灰度级出现的次数很多,而其它灰度级出现的

    2024年02月04日
    浏览(64)
  • C#使用OpenCv(OpenCVSharp)图像直方图均衡化处理实例

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行直方图均衡化处理。 直方图均衡化原理 直方图均衡化(Histogram Equalization)是一种常用的图像增强技术,用于改善图像的对比度和亮度分布。它通过重新分配图像灰度级的像素值,使得图像的直方图在灰度范围内更加

    2024年02月07日
    浏览(96)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包