opencv-python学习笔记-2对比度增强——研0基础学习

opencv- CLAHE 有限对比适应性直方图均衡化 阅读详情

一、灰度直方图及绘制

  1. 灰度直方图统计

灰度直方图用来描述每个像素在图像矩阵中出现的次数或概率。其横坐标一般为0-255个像素值,纵坐标为该像素值对应的像素点个数。如下图所示的图像矩阵(单通道灰度图,三通道时可以分别绘制),可以统计每个像素值出现的次数,也可以统计概率,统计像素值出现次数的灰度直方图如下所示。

在这里插入图片描述在这里插入图片描述

  1. 灰度直方图绘制
    a) 可以利用opencv的calcHist()统计像素值出现次数,通过matploblib的plot()绘制
    b)可以直接利用matploblib的hist()方法

cv2.calcHist(img,channels,mask,histSize,ranges,accumulate)
参数:
img:输入图像,为列表,如[img]
channels: 计算的通道,为列表,如[0]表示单通道,[0,1]统计两个通道
mask: 掩模,和输入图像大小一样的矩阵,为1的地方会进行统计(与图像逻辑与后再统计);无掩模时为None
histSize: 每一个channel对应的bins个数,为列表,如[256]表示256个像素值
ranges: bins的边界,为列表,如[0,256]表示像素值范围在0-256之间
accumulate: Accumulation flag. If it is set, the histogram is not cleared in the beginning when it is allocated. This feature enables you to compute a single histogram from several sets of arrays, or to update the histogram in time.

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

img = cv.imread(r"e:\2.jpg", 0)
hist = cv.calcHist([img], [0], None, [256], [0, 256])

plt.subplot(1, 3, 1), plt.plot(hist, color="r"), plt.axis([0, 256, 0, np.max(hist)])
plt.xlabel("gray level")
plt.ylabel("number of pixels")

plt.subplot(1, 3, 2), plt.hist(img.ravel(), bins=256, range=[0, 256]), plt.xlim([0, 256])
plt.xlabel("gray level")
plt.ylabel("number of pixels")

plt.subplot(1, 3, 3)
plt.plot(hist, color="r"), plt.axis([0, 256, 0, np.max(hist)])
plt.hist(img.ravel(), bins=256, range=[0, 256]), plt.xlim([0, 256])
plt.xlabel("gray level")
plt.ylabel("number of pixels")

plt.show()

在这里插入图片描述

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

img = cv.imread(r"e:\1.jpg",0)
histogram,bins = np.histogram(img,bins=256,range=[0,256])
print(histogram)
plt.plot(histogram,color="g")
plt.axis([0,256,0,np.max(histogram)])
plt.xlabel("gray level")
plt.ylabel("number of pixels")
plt.show()

np.histogram()

在这里插入图片描述
在这里插入图片描述

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

img = cv.imread(r"e:\1.jpg",0)
rows,cols = img.shape
hist = img.reshape(rows*cols)
histogram,bins,patch = plt.hist(hist,256,facecolor="green",histtype="bar") #histogram即为统计出的灰度值分布
plt.xlabel("gray level")
plt.ylabel("number of pixels")
plt.axis([0,255,0,np.max(histogram)])
plt.show()

plt.hist()

在这里插入图片描述

二、对比度增强

对比度增强,即将图片的灰度范围拉宽,如图片灰度分布范围在[50,150]之间,将其范围拉升到[0,256]之间。

  1. 线性变换:convertScaleAbs(src,dst,alpha,beta)
    参数:
    src: 图像对象矩阵
    dst:输出图像矩阵
    alpha:y=ax+b中的a值
    beta:y=ax+b中的b值
    (对于计算后大于255的像素值会截断为255)

通过函数y=ax+b对灰度值进行处理,例如对于过暗的图片,其灰度分布在[0,100], 选择a=2,b=10能将灰度范围拉伸到[10, 210]。


import cv2 as cv

img = cv.imread(r"e:\3.jpg")
print(img)
img_bright = cv.convertScaleAbs(img,alpha=1.5,beta=0)
print(img_bright)

cv.imshow("img",img)
cv.imshow("img_bright",img_bright)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述
采用numpy实现,其中可以针对不同区域像素点,采用不同系数a,b来动态改变像素值

import cv2 as cv
import numpy as np

img = cv.imread(r"e:\3.jpg")
a=1
b=100
y = np.float(a)*img+b
y[y>255]=255
y = np.round(y)
img_bright= y.astype(np.uint8)

cv.imshow("img",img)
cv.imshow("img_bright",img_bright)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

  1. 直方图正规化
    在这里插入图片描述
    cv2.normalize(src,dst,alpha,beta,normType,dtype,mask)
    参数:
    src: 图像对象矩阵
    dst:输出图像矩阵(和src的shape一样)
    alpha:正规化的值,如果是范围值,为范围的下限 (alpha – norm value to normalize to or the lower range boundary in case of the range normalization.)
    beta:如果是范围值,为范围的上限;正规化中不用到 ( upper range boundary in case of the range normalization; it is not used for the norm normalization.)
    norm_type:normalize的类型
    cv2.NORM_L1:将像素矩阵的1-范数做为最大值(矩阵中值的绝对值的和)
    cv2.NORM_L2:将像素矩阵的2-范数做为最大值(矩阵中值的平方和的开方)
    cv2.NORM_MINMAX:将像素矩阵的∞-范数做为最大值 (矩阵中值的绝对值的最大值)
    dtype: 输出图像矩阵的数据类型,默认为-1,即和src一样
    mask:掩模矩阵,只对感兴趣的地方归一化

  2. 伽马变换
    在这里插入图片描述

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

img = cv.imread(r"e:\3.jpg")
img_norm = img/255.0  #注意255.0得采用浮点数
img_gamma = np.power(img_norm,0.4)*255.0
img_gamma = img_gamma.astype(np.uint8)

cv.imshow("img",img)
cv.imshow("img_gamma",img_gamma)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

  1. 全局直方图均衡化

直方图均衡化的目的是将原图片每个像素值的像素点个数进行重新分配到[0,255]的256个像素值上,使得每个像素值对应的像素点个数近似相等,即重新分配后,0-255的每个像素值对应的像素点个数近似为(rows*cols/256)

cv2.equalizeHist(src,dst)
参数:
src: 图像对象矩阵,必须为单通道的uint8类型的矩阵数据
dst:输出图像矩阵(和src的shape一样)

import cv2 as cv

img = cv.imread(r"e:\3.jpg",0)
img_equalize = cv.equalizeHist(img)
cv.imshow("img",img)
cv.imshow("img_equalize",img_equalize)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述
使用numpy实现equalizeHist

# coding:utf-8

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
import math


# 统计灰度分布
def calc_hist(img):
    rows, cols = img.shape[:2]
    hist = np.zeros(256, np.uint64)  # 注意此处的数据格式不要用np.uint8,会溢出但不报错
    for r in range(rows):
        for c in range(cols):
            hist[img[r, c]] += 1

    return hist


def equalize_hist(img):
    rows, cols = img.shape[:2]
    hist = calc_hist(img)

    # 计算灰度累积分布
    hist_sum = np.zeros([256], np.uint32)  # 注意数据类型为np.uint32,防止溢出
    for i in range(256):
        if i == 0:
            hist_sum[i] = hist[i]
        else:
            hist_sum[i] = hist[i] + hist_sum[i - 1]

    # 输出图像的灰度分布
    output_hist = np.zeros(256, np.uint8)
    cofficient = 256.0 / (rows * cols)
    for i in range(256):
        q = cofficient * float(hist_sum[i]) - 1
        if q >= 0:
            output_hist[i] = math.floor(q)
        else:
            output_hist[i] = 0

    # 输出图像的像素值
    output_img = np.zeros([rows, cols], np.uint8)
    for r in range(rows):
        for c in range(cols):
            output_img[r, c] = output_hist[img[r, c]]

    return output_img


if __name__ == "__main__":
    img = cv.imread(r"e:\1.jpg", 0)
    img_equalize = equalize_hist(img)
    cv.imshow("img", img)
    cv.imshow("img_equalize", img_equalize)
    cv.waitKey(0)
    cv.destroyAllWindows()

原图
在这里插入图片描述
均衡化后
在这里插入图片描述
上述通过numpy实现equalizeHist的算法思路和原理如下:
在这里插入图片描述

  1. 限制对比度自适应直方图均衡化

相比全局直方图均衡化,自适应直方图均衡化将图像划分为不重叠的小块,在每一小块进行直方图均衡化,但若小块内有噪声,影响很大,需要通过限制对比度来进行抑制,即限制对比度自适应直方图均衡化。

clahe=cv2.createCLAHE(clipLimit,tileGridSize)
参数:
clipLimit:限制对比度的阈值,默认为40,直方图中像素值出现次数大于该阈值,多余的次数会被重新分配
tileGridSize:图像会被划分的size, 如tileGridSize=(8,8),默认为(8,8)

import cv2 as cv

img = cv.imread(r"e:\1.jpg",0)
clahe = cv.createCLAHE(3,(8,8))
dst = clahe.apply(img)
cv.imshow("img",img)
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()

原图
在这里插入图片描述

自适应均衡化后
在这里插入图片描述

【数字图像处理2.2】同态滤波器 增强图像 Python+Opencv 文章目录同态滤波器定义代码效果 同态滤波器 说在前面!!!!!同态滤波器内部有很多细节需要挖掘,我目前也只是一知半解,只能说先做出了一个能跑的程序,能处理处理图片交作业而已,在随后的更新中,我会逐渐为代码添加注释,并且详细说明同态滤波的原理和过程,如果有想让我讲的也可以评论留言。 定义 同态滤波是在频域中同时将图像亮度范围进行压缩并将图像对比度增强的方法。 同态滤波增强属于图像频域处理范畴,作用是对图像灰度范围进行调整,通过消除图像上照明不均匀的问题,增强图像的细节,同时对不损失亮区的图像细节。 代码 阅读详情

相关推荐

图像对比度与亮度调整

通过调整图像的对比度和亮度,我们可以改变图像的视觉效果,使其更加清晰、鲜明或者柔和。本文介绍了使用OpenCV库进行图像对比度和亮度调整的方法,并提供了相应的代码示例。你可以根据自己的需求调整对比度和亮度的值,以获得满意的图像效果。在图像处理中,调整图像的对比度和亮度是常见的操作。本文将介绍如何使用OpenCV库进行图像对比度和亮度的调整,并提供相应的源代码示例。图像亮度调整是指调整图像的整体亮度水平。通过调整这两个参数的值,可以增加或减小图像的对比度。通过调整这两个参数的值,可以增加或减小图像的亮度。

WzisTypescript的博客 423

OpenCV进阶 —— 调整图像亮度对比度

也就是像素值的大小的区别。那我乘以一个alpha系数,当alpha很大的时候就是放大了这种亮度值的差异,也就是提高了对比度,当alpha很小时,也就是缩小了亮度的差异,也就是缩小了对比度。线性变换有个问题,如上图,α=1.3 and β=40,提高原图亮度的同时,导致云几乎看不见了.如果要看见云的话,建筑的亮度又不够.如果查看不同变换下的灰度直方图的话可以看到.中间是原图的灰度直方图,可以看到低亮度值的像素点很多.与线性变换不同,对不同的原始亮度值,其改变强度是不同的,是非线性的.。最常用的是线性变换。

金戈鐡馬 3014

(7-1)图像增强:对比度增强

图像增强是一种数字图像处理技术,旨在改善或增强图像的视觉质量、清晰度和可识别性。图像增强可以涉及多种技术和方法,用于提高图像的对比度、亮度、色彩鲜艳度、细节清晰度和噪声减少等方面。在本章的内容中,将详细讲解使用Python语言实现图像增强的知识,为读者步入本书后面知识的学习打下基础。

码农三叔 4209

016-OpenCV 图像对比度亮度调整

学得不好,想到哪,写到哪。 先说一个蠢得要命的问题。 就这,研究了好久,才突然发现应该是img[i, j],不是[i:j],被自己蠢到哭,服了自己。以后写代码一定要注意细节!!! 接下来进入主题,上代码。 import cv2 def nothing(a): pass ''' cv2.imread(filename,flags) # filename为文件名,图片与.py文件在一个文件夹时输入文件名即可 # 不在一个文件夹时输入图片的路径和名字 # flags为图片的颜色类型,

weixin_48013634的博客 1851

OpenCV-Python实战(1)——OpenCV简介与图像处理基础

OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时也提供了 Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。在本文中,将介绍 OpenCV 库,包括它的主要模块和典型应用场景,同时使用 OpenCV-Python 实战讲解图像处理基础要点。

盼小辉丶的博客 27万+

Python,OpenCV直方图均衡化以提高图像对比度

这篇博客将介绍直方图均衡化以及俩种经典的方法:(全局 & 自适应直方图均衡化); 均衡化作用:1)可以提升图像的对比度;2)使所有图像具有相同的照明条件;

qq_40985985的博客 4272

OpenCV—python 自适应对比度增强(ACE)

文章目录 在图像处理的方法中,自适应方法是与图像本身信息相关,根据图像对图特征对图像进行处理的一系列方法,这些方法往往具有更好的鲁棒性、普适性。而本文中提到的这种ACE方法由NarendraPM Narendra P MNarendraPM等人在《Real-Time Adaptive Contrast Enhancement》 提到。 对于图像中的每一个点,分别计算其局部均值与局部标准差; M(i,j)=1(2n+1)(2m+1)∑s=i−ni+n∑k=j−mj+mf(s,k)M(i,j) = \frac{

红叶谷 wsp_1138886114的博客 7464

OpenCV-Python实战(8)——直方图均衡化

图像处理技术是计算机视觉项目的核心,通常是计算机视觉项目中的关键工具,可以使用它们来完成各种计算机视觉任务。在本文中,将介绍如何使用 OpenCV 函数 cv2.equalizeHist() 执行直方图均衡,并将其应用于灰度和彩色图像,cv2.equalizeHist() 函数将亮度归一化并提高图像的对比度。

盼小辉丶的博客 2万+

python opencv 增强对比度

import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('miao.jpg',0) hist=cv2.calcHist([img],[0],None,[256],[0,256]) 这是我们的测试图片,看起开一片漆黑,但实际上是有只小猫的,随后我们可以看到 # 绘制直方图 # 使用Mat...

TingHW的博客 2万+

ArduPilot + Gazebo + Mavros + QGC + 遥控器:从仿真到实机的自主轨迹控制实践

本文详细介绍了基于ArduPilot、Gazebo、Mavros和QGC的无人机自主轨迹控制全流程实践。从仿真环境搭建、多终端协同配置,到遥控器集成与自主圆形轨迹算法实现,提供了完整的代码示例和实机迁移要点,帮助开发者快速掌握无人机自主控制技术。

corn8的博客 940

线性分类器(Linear Classifier)

线性分类器 如上图所示,这是二维空间中的一个数据集,如果他正好能够被一条直线分成两类,那么我们称它为线性可分数据集,这条直线就是一个线性分类器。 在三维空间中,如果数据集线性可分,是指能够被一个平面分为两类。 在一维空间中,所有的点都在一条直线上,如果线性可分。可以理解为它们能够被一个点分开。 这里的直线、平面、点被分为决策边界。 一个 m 维空间中的数据集,如果能够被一个超平面一分为二,那么这个数据集就是线性可分的,这个超平面就是决策边界。 例如,这是二维平面上的一条直线, 它可以把平面切分成两

xuechanba的博客 1万+

(二)OpenCV-Python学习—对比度增强

·对于部分图像,会出现整体较暗或较亮的情况,这是由于图片的灰度值范围较小,即对比度低。实际应用中,通过绘制图片的灰度直方图,可以很明显的判断图片的灰度值分布,区分其对比度高低。对于对比度较低的图片,可以通过一定的算法来增强其对比度。常用的方法有线性变换,伽马变换,直方图均衡化,局部自适应直方图均衡化等。 1. 灰度直方图及绘制 灰度直方图用来描述每个像素在图像矩阵中出现的次数或概率。其横坐标一般为0-255个像素值,纵坐标为该像素值对应的像素点个数。如下图所示的图像矩阵(单通道灰度图,三通道时可以分别..

wangjia2575525474的博客 2486

08-SD卡-TF卡硬件电路设计

SD卡-TF卡硬件电路设计

weixin_66510961的博客 8255

python增强对比度_OpenCV-Python-(4)-对比度增强

对比度增强cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) #图像直方图cv2.normalize(src[, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]])→ dst #直方图归一化cv2.equalizeHist(image...

weixin_39832643的博客 2378

探索Three.js:利用ShaderMaterial实现动态着色器特效

本文深入探讨了Three.js中ShaderMaterial的应用,指导开发者利用GLSL编写自定义着色器实现动态特效。文章从核心概念GLSL、Uniforms与Attributes讲起,通过创建动态颜色变化平面的实战案例,逐步进阶到实现波纹扩散与动态光影等高级效果,并提供了性能优化与调试技巧,帮助读者掌握创建高性能WebGL视觉特效的关键技能。

weixin_29250403的博客 200

关于深度可分离卷积

关于深度学习中的深度可分离卷积

qq_45670407的博客 1796

opencv学习(python)-对比度增强

opencv学习(python)-对比度增强 下面的程序都是我在学习opencv算法精解基于python与C++一书参考后自己又打了一遍。 构建灰度直方图 import numpy as np import cv2 import matplotlib.pyplot as plt def calcGrayHist(image): rows=image.shape[0] cols=...

weixin_42101177的博客 945

量产导入 | 产品可靠性测试标准完整大集合(JEDEC/IEC/SAE…)

产品可靠性测试是产品质量保证中的重要一环, 包含有Pre-con, aging(寿命)和ESD(静电)等, 下面就收集了权威标准JEDEC全系列, 请参照如下 同时也附上其它的可靠性标准供大家参考及交叉理解, 可能侧重点不同, 大家可以参考下。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1660

opencv中如何调整图像亮度和对比度,以及亮度和对比度调整的原理

首先减去均值,然后调整对比度,然后加上均值,最后调整亮度。通过对比直方图的变化效果 可知上面两个方法 作用是类似的。本来想找opencv的方法链接,但是链接已经失效。bri_mean锚定为127的时候。python实现的一个代码如下。增加对比度, 直方图更加均衡。增加亮度,直方图向右平移。...

tony365的博客 1万+

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动280.1 现象描述280.2 优化分析 openGauss学习笔记-280 ope

超哥的博客 308

PLC框架-1.3- 汇川PN伺服(3号报文)

本文以汇川IS620F伺服为例,详细介绍了FB_Servo_ToAxis功能块的应用方法。该功能块封装了MC_Home等轴控指令,实现使能、定位、点动、速度模式及回零等功能,支持转矩限制与显示,并具备行程统计和HMI单位自动切换特性。文章从硬件配置(PN网络连接、报文选择)、参数设置(控制模式、电子齿轮比),到软件实现(功能块调用、手动/自动控制逻辑)进行了系统说明,重点展示了绝对/相对定位、速度模式等典型应用场景的程序编写方法,为汇川伺服在Profinet网络下的工程应用提供了完整解决方案。

qq_34047402的博客 755

python opencv图像对比度增强_图像增强、锐化, Python-OpenCV 来实现 4 种方法!

图像增强目的使得模糊图片变得更加清晰、图片模糊的原因是因为像素灰度差值变化不大,如片各区域产生视觉效果似乎都是一样的, 没有较为突出的地方,看起来不清晰的感觉解决这个问题的最直接简单办法,放大像素灰度值差值、使图像中的细节更加清晰。目前较为常用的几个方法:伽马变换、线性变换、分段线性变换、直方图均衡化,对于图像对比度增强,都能取得不错的效果!本文将对每种方法 简单介绍一下,并借助于 Python ...

weixin_39717704的博客 2509

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

opencv-python图像增强七:图像亮度对比度饱和度调整

在图像处理领域,对比度、亮度和饱和度是影响图像视觉效果的重要因素。合理调整这三个参数,可以使图像更具表现力,满足不同场景的需求。本文将带领大家使用OpenCV,这一强大的开源计算机视觉库,轻松实现图像对比度、亮度和饱和度的修改。本文将从基础知识入手,详细介绍如何使用OpenCV对图像进行操作,包括对比度、亮度和饱和度的调整。

HanWenKing的博客 7734

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【图像处理基石】图像对比度增强入门:从概念到实战(Python+OpenCV)

简单说,对比度就是图像中亮部和暗部的差异程度。对比度高的图:明暗界限清晰,比如阳光下的物体,影子黑、高光亮,细节一眼就能看清;对比度低的图:整体灰蒙蒙,亮部不亮、暗部不暗,比如雾霾天拍的照片、旧胶片扫描件,甚至晚上没开闪光灯的监控画面。对灰度图(只有黑白灰):对比度取决于「灰度值的分布范围」——如果所有像素的灰度都集中在100-150之间(8位图像,灰度范围0-255),画面就会发灰;如果能拉开到0-255,对比度就上去了。

专注:太空算力、AI infra、异构调度、大模型成本工程 1446

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python-OpenCV之对比度增强

简介 对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,差异范围越小代表对比越小。对比度增强技术主要解决图像灰度级范围较小造成的对比度低问题,目的是将图像的灰度级放大到指定的程度,使图像中的细节看起来更加清晰。 基础知识 灰度直方图 概念:灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或占有率。 python实现过程...

li_il的博客 1万+

[OpenCV学习笔记] 第一章 对比度增强(上)线性变换

尽管我们通过各种方法来采集高质量的图像,但是有的图像还是不够好,需要通过图像增强技术提高其质量,本章中要介绍的对比度增强或者称为对比度拉伸就是图像增强技术的一种,它主要解决由于图像的灰度级范围较小造成的对比度较低的问题,目的就是将输出图像的灰度级放大到指定的程度,使得图像中的细节看起来更加清晰。对比度增强有几种常用的方法,如线性变换、分段线性变换、伽马变换、直方图正规化、直方图均衡化、局部自适应直方图均衡化等,这些方法的计算代价较小,但是却产生了较为理想的效果。

m0_62836456的博客 2002
上一篇: img.shape[:2]的意思
下一篇: RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the
LoriaLi
博客等级 码龄8年 16粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值