使用所提到的技术,我想出了几个不同的版本.
每个方法返回一个值,但与其他方法不完全相同.此外,除了最后一个方法之外,所有方法都运行大约相同的速度,这取决于图像大小慢得多.
>将图像隐藏为灰度,返回平均像素亮度.
def brightness( im_file ):
im = Image.open(im_file).convert('L')
stat = ImageStat.Stat(im)
return stat.mean[0]
>将图像隐藏为灰度,返回RMS像素亮度.
def brightness( im_file ):
im = Image.open(im_file).convert('L')
stat = ImageStat.Stat(im)
return stat.rms[0]
>平均像素,然后转换为“感知亮度”.
def brightness( im_file ):
im = Image.open(im_file)
stat = ImageStat.Stat(im)
r,g,b = stat.mean
return math.sqrt(0.241*(r**2) + 0.691*(g**2) + 0.068*(b**2))
>像素的RMS,然后转换为“感知亮度”.
def brightness( im_file ):
im = Image.open(im_file)
stat = ImageStat.Stat(im)
r,g,b = stat.rms
return math.sqrt(0.241*(r**2) + 0.691(
使用所提到的技术,我想出了几个不同的版本.每个方法返回一个值,但与其他方法不完全相同.此外,除了最后一个方法之外,所有方法都运行大约相同的速度,这取决于图像大小慢得多.>将图像隐藏为灰度,返回平均像素亮度.def brightness( im_file ):im = Image.open(im_file).convert('L')stat = ImageStat.Stat(im)return...
YUV 数据格式概览
YUV 的原理是把
亮度
与色度分离,
使用
Y、U、V 分别表示
亮度
,以及蓝色通道与
亮度
的差值和红色通道与
亮度
的差值。其中 Y 信号分量除了表示
亮度
(luma) 信号外,还含有较多的绿色通道量,单纯的 Y 分量可以显示出完整的黑白
图像
。U、V 分量分别表示蓝 (blue)、红 (red) 分量信号,它们只含有色彩 (chrominance/color) 信息,所以 YUV 也称为 YCbCr,C 意思可以理解为 (component 或者 color)。
维基百科上的 RGB 转 YUV 的公式能更好的反应 YUV 与 RGB 的关系,以及为什么称为 YCbCr:
Python
中计算
图像
亮度
的
方法
PS:转载+翻译(有侵权告诉我,立马删除),为了自己记录;
以下几个
方法
每个
方法
都返回一个相近值,但与其他
方法
不完全相同。另外,除了最后一个
方法
,所有
方法
的运行速度都差不多,最后一个
方法
的运行速度要慢得多,这取决于
图像
的大小
对200幅
图像
进行了模拟测试。发现
方法
2和
方法
4给出了几乎相同的结果。
方法
3和
方法
5也几乎相同。
方法
1紧随
方法
3和
方法
5之后(有一些例外)。
转换
图像
到灰度,返回平均像素
亮度
:
def brightness( im_file ):
将所有的图片根据
亮度
值分成4个区间,能看出不同的
亮度
值对模型的影响。比如有的论文按80,130将图片分为Low,Middle和High。
from PIL import Image, ImageStat
import math
import os
import matplotlib.pyplot as plt
import numpy as np
import cv2
import shutil
def brightness(im_file):
im = Image.open(im_file)
资源包含文件:课程word+答辩PPT+项目源码及测试图片
数字
图像
中阴影是普遍存在的,而且其为数字
图像
处理的很多任务,如
图像
特征
提取
,
图像
识别,
图像
分割带来了不利的影响。一个有效的阴影检测与去除
方法
可以为接下来的
图像
处理带来很多便利。
与同表面非阴影区域相比,
图像
中阴影区域一般会具有以下特征:其
亮度
会明显比非阴影区域低;与非阴影区域有分界,界线宽度一般不大,在界线上存在渐变;阴影区域的颜色通道比例和非阴影区域比较接近。我们可以利用这些特征来完成阴影检测的工作。
详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/125589942
对于R,G,B三个通道,每个通道增加相同的增量。
线性
亮度
调整:
利用HSL颜色空间,通过只对其L(
亮度
)部分调整,可达到
图像
亮度
的线性调整。但是,RGB和HSL颜色空间的转换很繁琐,一般还需要浮点数的运算,不仅增加了代码的复杂度,更重要的是要逐点将RGB转换为HSL,然后确定新的L值,再将HSL转换为RGB,运行速度可想而知是很慢的。要想提高
图像
亮度
线性调整的速度,应该从三方面考虑,一是变浮点运算为整数运算,二是只
提取
HSL的L部分进行调整,三是采用汇编代码,在Delphi中,当然是BASM。下面是按照这三方面考虑写的
图像
亮度
线性调整代码:
L := (Max(
基于
python
的暗原色先验算法与AOD神经网络实现
图像
去雾源码+项目说明文档+实验报告+可执行程序.zip
【项目介绍】
该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载
使用
!
本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载
使用
,也适合小白学习进阶,
或者实际项目借鉴参考!
当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。
图像
去雾
本项目用暗原色先验算法和AOD神经网络实现
图像
去雾
暗原色先验
可执行程序
可程序程序带有UI用户界面,在Windows系统下打开“可执行程序\暗原色先验\dehaze.exe”来
使用
。
点击“选择图片”按钮选择要处理的图片,点击“去雾”按钮获得
图像
去雾结果,可选择对结果进行直方图均衡,可以调整结果图片的
亮度
。
可以将测试图片放在testbench文件夹内,运行main.m,在results文件夹内查看结果。
- mygui.m: UI用户界面的代码
- main.m: 对同目录下“testbench”文件夹中的图片进行去雾,存储在results文件夹下。
- dehaze.m:
图像
去雾主逻辑
- getA.m: 获得全局背景光。
- getA_ave.m: 获得全局背景光,
使用
平均值的方式。
- guidFilter.m: 快速引导滤波算法.
- hist_equal.m: 对rgb分别进行rgb均衡
AOD神经网络
可执行程序
由于可执行程序太大(780M),所以上传至清华网盘 https://cloud.tsinghua.edu.cn/d/6be1526e6dfb4fc08e57/。
下载ui.exe和epoch11.pth,放在同一目录下,运行ui.exe
点击“选择图片”按钮选择要处理的图片,点击“去雾”按钮获得
图像
去雾结果,可选择对结果进行直方图均衡,可以调整结果图片的
亮度
。
- ui.py: UI用户界面的代码。
- train.py: 训练网络所用代码。
- dataloader.py:
提取
图片数据。
- utilis.py: 附加函数,如保存模型参数等。
- model.py: AOD模型。
- test.py: 载入模型参数并在给定图片上进行测试。
- torch 1.2.0
-
python
3.5.2
- Cuda compilation tools, release 10.1, V10.1.105
- cudnn 6
- **FC_LR = 1e-4** (learning rate of fully-connected parameters)
- **NET_LR = 1e-4** (learning rate of other parameters)
- **BATCH_SIZE = 64** (training batch size)
- **OPTIMIZER = 'adam'** (optimizer choice, adam or sgd)
- **WEIGHT_DECAY = 1e-4** (weight decay, applied only when using SGD)
- **MOMENTUM = 0.9** (momentum, applied only when using SGD)
- **DECAY_RATE = 0.1** (decay rate of learning rate every 10 epoches)
训练
方法
首先需要从https://sites.google.com/site/boyilics/website-builder/project-page下载训练数据集放在code文件夹同目录data文件夹内
data文件夹内应该由data文件夹(有雾图片)和images文件夹(原图)
在根目录下运行
python
code/train.py
首先,需要将彩色
图像
转换为HSI模型。HSI模型分别表示色相(Hue)、饱和度(Saturation)和
亮度
(Intensity),可以通过以下代码实现:
```
python
import cv2
import numpy as np
# 读取彩色
图像
img = cv2.imread('color_image.jpg')
# 转换为HSI模型
img_hsi = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)
# 分离H、S、I通道
h_channel, s_channel, i_channel = cv2.split(img_hsi)
接着,可以对
亮度
(I通道)进行增强。这里
使用
对数变换
方法
实现:
```
python
# 对数变换增强
亮度
i_log = np.log(i_channel.astype(np.float32) + 1)
i_log = (i_log - np.min(i_log)) / (np.max(i_log) - np.min(i_log)) * 255
i_log = i_log.astype(np.uint8)
最后,将增强后的
亮度
通道与原来的色相和饱和度通道合并,转换回BGR模型即可。
```
python
# 合并H、S、I通道
img_hsi_enhanced = cv2.merge([h_channel, s_channel, i_log])
# 转换为BGR模型
img_enhanced = cv2.cvtColor(img_hsi_enhanced, cv2.COLOR_HSV2BGR_FULL)
# 显示增强后的
图像
cv2.imshow('Enhanced Image', img_enhanced)
cv2.waitKey(0)
cv2.destroyAllWindows()
完整代码示例:
```
python
import cv2
import numpy as np
# 读取彩色
图像
img = cv2.imread('color_image.jpg')
# 转换为HSI模型
img_hsi = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)
# 分离H、S、I通道
h_channel, s_channel, i_channel = cv2.split(img_hsi)
# 对数变换增强
亮度
i_log = np.log(i_channel.astype(np.float32) + 1)
i_log = (i_log - np.min(i_log)) / (np.max(i_log) - np.min(i_log)) * 255
i_log = i_log.astype(np.uint8)
# 合并H、S、I通道
img_hsi_enhanced = cv2.merge([h_channel, s_channel, i_log])
# 转换为BGR模型
img_enhanced = cv2.cvtColor(img_hsi_enhanced, cv2.COLOR_HSV2BGR_FULL)
# 显示增强后的
图像
cv2.imshow('Enhanced Image', img_enhanced)
cv2.waitKey(0)
cv2.destroyAllWindows()