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

计算机视觉opencv之金字塔直方图 - 详解

计算机视觉opencv之金字塔&直方图 - 详解

一、金字塔

(一)高斯金字塔

高斯金字塔是一种图像多尺度表示方法,用于图像处理中的尺寸缩放和多分辨率分析

1.高斯金字塔操作中的下采样

下采样是一种减小图像尺寸的方法,它通常涉及到降低图像的分辨率,即减少图像中像素的数量,从而使图像看起来更小

import cv2
image=cv2.imread(r"D:\project\123s.jpg",0)
cv2.imshow('image1',image)
image_down1=cv2.pyrDown(image)
cv2.imshow('down1',image_down1)
image_down2=cv2.pyrDown(image_down1)
cv2.imshow('down2',image_down2)
cv2.waitKey(0)

对原图进行缩小,删除像素矩阵的偶数行和列,图片变模糊

2.高斯金字塔操作中的上采样

上采样是一种增大图像尺寸的方法,他通过插值和滤波技术来恢复图像的分辨率和细节,通常用意图像放大或与下采样后的图像进行比较(这里我们接着下采样代码后面写)

image_up1=cv2.pyrUp(image)
cv2.imshow('up1',image_up1)
image_up2=cv2.pyrUp(image_up1)
cv2.imshow('up1',image_up2)
cv2.waitKey(0)

图片会变得很大,由于太大,不好展示,上采样是插入零行或列

3.对下采样后图像进行上采样

'''对下采样后图像进行上采样,图像变模糊,无法复原'''
image_down1_up=cv2.pyrUp(image_down1)
image_down2_up=cv2.pyrUp(image_down2)
cv2.imshow('down1_up',image_down1_up)
cv2.imshow('down2_up',image_down2_up)
cv2.waitKey(0)

(二)拉普拉斯金字塔

拉普拉斯金字塔是高斯金字塔的“细节补充”版本,用于保存和恢复图像高频细节

拉普拉斯 = 原图 - 上采样的模糊图

这里我们在L0和L1之间加入的使用resize是让down2——up图片尺寸和down1图片尺寸保持一致,这样才可以进行相减,不进行尺寸一致,就会报错

'''拉普拉斯金字塔'''
L0=image-image_down1_up
image_down2_up = cv2.resize(image_down2_up, (image_down1.shape[1], image_down1.shape[0]))
L1=image_down1-image_down2_up
fuyuan=image_down1_up+L0
cv2.imshow('L0',L0)
cv2.imshow('L1',L1)
cv2.imshow('fuyuan',fuyuan)
cv2.waitKey(0)

三、直方图

cv2.calcHist(images,channeLs,mask,histSize,ranges) :计算图像的直方图,用于表示图像中像素灰度级别的分布情况.

  • images:原图像图像格式为uint8或float32。当传入函数时应用中括号[]括来,例如[img]
  • channels:表示传入的图像通道数。如果输入图像是灰度图它的值就是[0]。 如果是彩色图像的传入的参数可以是[0][1][2]它们分别对应着BGR。
  • mask:掩模图像。统计整幅图像的直方图就把它为None。但是如果你想统计图像某一部分的直方图,你就制作一个掩模图像并使用它。
  • histSize:BINS的数目。也需用中括号括来(分成多少个区间)
  • BINS:上面的直方图显示了每个像素值的像素数,即从0到255。即您需要256个值才能显示上述直方图。
import cv2
import numpy as np
import numpy as pd
import matplotlib.pyplot as plt
image=cv2.imread(r"D:\project\cat2s.jpg")
a=image.ravel()#将图像转换为一维数组,numpy的ravel函数
plt.hist(a,bins=256)#matplotlib的hist函数绘制直方图
plt.show()
image_hist=cv2.calcHist([image],[0],None,[16],[0,256])
plt.plot(image_hist)#使用calcHist的值绘制曲线图
plt.show()

img=cv2.imread(r"D:\project\cat2s.jpg")
color=('b','g','r')
for i,col in enumerate(color):histr=cv2.calcHist([img],[i],None,[256],[0,256])plt.plot(histr,color=col)
plt.show()

cv2.bitwise_and():对图像(灰度图像或彩色图像均可)每个像素值进行二进制"与"操作,1&1=1,1&0=0,01=0,0&0=0

bitwise_and(src1, src2, dst=None, mask=None)参数:

  • src1、Src2:为输入图像或标量,标src1和src2相与。
  • dst:可选输出变量,如果需要使用非None则要先定义,且其大小与输入变量相同
  • mask:图像掩膜,可选参数,用于指定要更改的输出图像数组的元素,mask为o的值,src1和Isrc2相与的值都为0非的值,为src1和src2相与的值。

mask:直方图掩膜(mask)是一个二值图像,用于指定计算直方图的区域。作用:只统计掩膜白色区域(255)的像素,忽略黑色区域(0)

img2=cv2.imread(r"D:\project\cat2s.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow('img2',img2)
cv2.waitKey(0)
mask=np.zeros(img2.shape[:2],np.uint8)
mask[50:600,100:400]=255
cv2.imshow('mask',mask)
cv2.waitKey(0)
img2_mask=cv2.bitwise_and(img2,img2,mask=mask)
cv2.imshow('img_mask',img2_mask)
cv2.waitKey(0)
img2_hist_mask=cv2.calcHist([img2],[0],mask,[256],[0,256])
plt.plot(img2_hist_mask)
plt.show()

三、直方图的均衡化

真方图均衡化:真方图均衡化是一种图像增强技术,它可以通过增加图像的对比度和亮度来改善图像的质量。

直方图均衡化通过将图像的像素值分布均匀化来实现这一目标。

在Python OpenCV中,可以使用cv2.equalizeHist()函数来实现直方图均衡化。 该函数将输入图像转换为灰度图像,并将其像素值分布均匀化,从而增强图像的对比度和亮度。

import matplotlib.pyplot as plt
import  numpy as np
import cv2
black=cv2.imread("black.jpg",cv2.IMREAD_GRAYSCALE)
plt.hist(black.ravel(),bins=256)#多维数组拉为一维
# plt.show()
black_equalize=cv2.equalizeHist(black)
plt.hist(black_equalize.ravel(),bins=256)
# plt.show()
res=np.hstack((black,black_equalize))#横向拼接,将多个数组按水平方向(列顺序)堆叠一个新的数组
cv2.imshow('black_equalize',res)
cv2.waitKey(0)

自适应百方图均衡化(局部百方图处理),通过局部调整图像的直方图分布来提升图像的对比度和细节表现力,当需要保存细节特征,需要做局部处理

cv2.createCLAHE([, clipLimit[, tileGridSize]])——>retval 参数说明:

  • clipLimit:颜色对比度的阈值,可选项,默认值8
  • titleGridSize:局部直方图均衡化的模板(邻域)大小,可选项,默认值(8,8)

可以调节参数的值得到处理比较好的图片

clahe=cv2.createCLAHE(clipLimit=30,tileGridSize=(3,3))#通过类创建了一个局部均衡化对象
black_clahe=clahe.apply(black)
res=np.hstack((black,black_equalize,black_clahe))
cv2.imshow('black_equalize',res)
cv2.waitKey(0)

http://www.jsqmd.com/news/391974/

相关文章:

  • 题解:洛谷 P1229 遍历问题
  • 百联OK卡回收攻略:快速实现交易,解决常见问题 - 团团收购物卡回收
  • 西门子 博图V15洁净室温湿度串级控制结构化编程 使用串级PID的方式控制空调的回风,送风的温...
  • 英语_作文练习_Curiosity Leads Me_待读
  • 题解:洛谷 P5266 【深基17.例6】学籍管理
  • 题解:洛谷 P1918 保龄球
  • 2026评价好的接线防爆箱供应商怎么选?秘籍大揭秘,住宅配电柜/高压配电柜/金属封闭高压柜,防爆箱厂家怎么选择 - 品牌推荐师
  • 2026金相镶嵌机供应商推荐,性能稳定更可靠,单点加力金相磨抛机/试验机/电动洛氏硬度计,金相镶嵌机企业找哪家 - 品牌推荐师
  • 永辉超市卡怎么回收?实用技巧让你不再浪费! - 团团收购物卡回收
  • COMSOL仿真研究:单个金纳米颗粒光热效应的复现与波动光学、固体传热机理的探索
  • YOLOv12 改进 | Backbone改进 2
  • 生产环境【大模型学习】提示词工程(Prompt Engineering)技术深度报告最佳实践与性能优化
  • 学习笔记:连续子数组和问题的优化思路与工程实现思考
  • 学习笔记:二进制数组中0和1数量相等的最长连续子数组——从常规解法到性能优化
  • 量子网络:从理论到工程化探索
  • 分期乐购物额度回收平台推荐:省钱、省力的优选方法 - 团团收购物卡回收
  • PNG 转 JPG 在线工具推荐:免费、批量、无需注册的实用网站整理
  • 深入解析:基于机器学习的农产品价格数据分析与预测系统
  • 定稿前必看!10个降AIGC工具:继续教育降AI率全测评
  • 超级老龄化科技社会
  • 把vlm专门识别屏幕加入历史对话记录上下文中,​然后llm每两分钟参考历史记录对话这样效果好吗
  • 少走弯路:千笔AI,研究生降重首选利器
  • 脚本之轻 vs 程序之重:深度解析3DSMax两大插件生态的优劣与抉择 - 实践
  • 加油卡回收流程揭秘:平台选择与避坑技巧全解析 - 团团收购物卡回收
  • 详细介绍:P14978 [USACO26JAN1] Mooclear Reactor S题解
  • 硕士论文5万字AI率太高怎么办?大论文降AI全攻略
  • 文科生论文AI率特别高?原因和解决方案都在这了
  • 2070年人口数量可能降低一半,剩下7亿人。采用AI + 机器人来应对的可能和可行性有多大?
  • 永辉超市卡快速回收:如何找到高价回收平台 - 团团收购物卡回收
  • 答辩前一天AI率还很高?紧急降AI率的3小时速成方案