-
一名身穿白色连衣裙的少女正在伸手采花,她动作轻柔,姿态款款,眼眸低垂。
-
图像识别(Image Recognition),基于深度学习技术,可准确识别图像中的视觉内容,提供多种物体、场景和概念标签,具备目标检测和属性识别等能力,帮助客户准确识别和理解图像内容。分类文档链接备注最新动态cid:link_5 应用场景cid:link_2 API参考cid:link_3 FAQcid:link_4 华为云在线课程图像识别服务https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXE025+Self-paced/about?isAuth=0&cfrom=hwc图像识别,基于深度学习技术,可准确识别图像中的视觉内容,提供数万种物体、场景和概念标签,具备目标检测和属性识别等能力,帮助客户准确识别和理解图像内容。图像处理理论、应用与实验https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXE175+Self-paced/about?isAuth=0&cfrom=hwc计算机视觉是深度学习领域最热门的研究领域之一,它衍生出了一大批快速发展且具有实际作用的应用,包括人脸识别、图像检测、目标监测以及智能驾驶等。这一切本质都是对图像数据进行处理,本课程就图像处理理论及相应技术做了介绍,包括传统特征提取算法和卷积神经网络,学习时注意两者的区别。华为云开发者网图像识别 Image开放能力cid:link_6
-
最全图像融合论文及代码整理 News [2022-07-29] 我们的综述论文《基于深度学习的图像融合方法综述》被《中国图象图形学报》正式接收![论文下载] Github项目地址:https://github.com/Linfeng-Tang/Image-Fusion (欢迎大家Start、 Fork、 Fellow一键三连哦~) 图像融合(Image Fusion) 多模图像融合(Multi-Modal Image Fusion) 红外和可见光图像融合(Infrared and visible image fusion) 医学图像融合(Medical image fusion) 数字摄影图像融合(Digital Photography Image Fusion) 多曝光图像融合(Multi-exposure image fusion) 多聚焦图像融合(Multi-focus image fusion) 遥感影像融合(Remote Sensing Image Fusion) 全色图像锐化(Pansharpening) 通用图像融合框架(General Image Fusion Framerwork) 综述(Survey) 数据集(Dataset) 评估指标(Evaluation Metric) 通用评估指标(General evaluation metric) 遥感影像融合评估指标 Citation 图像融合系列博客还有: 图像融合综述论文整理参见:图像融合综述论文整理 图像融合评估指标参见:红外和可见光图像融合评估指标 图像融合常用数据集整理参见:图像融合常用数据集整理 通用图像融合框架论文及代码整理参见:通用图像融合框架论文及代码整理 基于深度学习的红外和可见光图像融合论文及代码整理参见:基于深度学习的红外和可见光图像融合论文及代码整理 更加详细的红外和可见光图像融合代码参见:红外和可见光图像融合论文及代码整理 基于深度学习的多曝光图像融合论文及代码整理参见:基于深度学习的多曝光图像融合论文及代码整理 基于深度学习的多聚焦图像融合论文及代码整理参见:基于深度学习的多聚焦图像融合(Multi-focus Image Fusion)论文及代码整理 基于深度学习的全色图像锐化论文及代码整理参见:基于深度学习的全色图像锐化(Pansharpening)论文及代码整理 基于深度学习的医学图像融合论文及代码整理参见:基于深度学习的医学图像融合(Medical image fusion)论文及代码整理 彩色图像融合程序参见:彩色图像融合 SeAFusion:首个结合高级视觉任务的图像融合框架参见:SeAFusion:首个结合高级视觉任务的图像融合框架 多模图像融合(Multi-Modal Image Fusion) 红外和可见光图像融合(Infrared and visible image fusion) 方法 标题 论文 代码 发表期刊或会议 基础框架 监督范式 发表年份 DenseFuse DenseFuse: A Fusion Approach to Infrared and Visible Images Paper Code TIP AE 自监督 2019 FusionGAN FusionGAN: A generative adversarial network for infrared and visible image fusion Paper Code InfFus GAN 无监督 2019 DDcGAN Learning a Generative Model for Fusing Infrared and Visible Images via Conditional Generative Adversarial Network with Dual Discriminators Paper Code IJCAI GAN 无监督 2019 NestFuse NestFuse: An Infrared and Visible Image Fusion Architecture Based on Nest Connection and Spatial/Channel Attention Models Paper Code TIM AE 自监督 2020 DDcGAN DDcGAN: A dual-discriminator conditional generative adversarial network for multi-resolution image fusion Paper Code TIP GAN 无监督 2020 RFN-Nest RFN-Nest: An end-to-end residual fusion network for infrared and visible images Paper Code InfFus AE 自监督 2021 CSF Classification Saliency-Based Rule for Visible and Infrared Image Fusion Paper Code TCI AE 自监督 2021 DRF DRF: Disentangled Representation for Visible and Infrared Image Fusion Paper Code TIM AE 自监督 2021 SEDRFuse SEDRFuse: A Symmetric Encoder–Decoder With Residual Block Network for Infrared and Visible Image Fusion Paper Code TIM AE 自监督 2021 MFEIF Learning a Deep Multi-Scale Feature Ensemble and an Edge-Attention Guidance for Image Fusion Paper Code TCSVT AE 自监督 2021 Meta-Learning Different Input Resolutions and Arbitrary Output Resolution: A Meta Learning-Based Deep Framework for Infrared and Visible Image Fusion Paper TIP CNN 无监督 2021 RXDNFuse RXDNFuse: A aggregated residual dense network for infrared and visible image fusion Paper InfFus CNN 无监督 2021 STDFusionNet STDFusionNet: An Infrared and Visible Image Fusion Network Based on Salient Target Detection Paper Code TIM CNN 无监督 2021 D2LE A Bilevel Integrated Model With Data-Driven Layer Ensemble for Multi-Modality Image Fusion Paper TIP CNN 无监督 2021 HAF Searching a Hierarchically Aggregated Fusion Architecture for Fast Multi-Modality Image Fusion Paper Code ACM MM CNN 无监督 2021 SDDGAN Semantic-supervised Infrared and Visible Image Fusion via a Dual-discriminator Generative Adversarial Network Paper Code TMM GAN 无监督 2021 Detail-GAN Infrared and visible image fusion via detail preserving adversarial learning Paper Code InfFus GAN 无监督 2021 Perception-GAN Image fusion based on generative adversarial network consistent with perception Paper Code InfFus GAN 无监督 2021 GAN-FM GAN-FM: Infrared and Visible Image Fusion Using GAN With Full-Scale Skip Connection and Dual Markovian Discriminators Paper Code TCI GAN 无监督 2021 AttentionFGAN AttentionFGAN: Infrared and Visible Image Fusion Using Attention-Based Generative Adversarial Networks Paper TMM GAN 无监督 2021 GANMcC GANMcC: A Generative Adversarial Network With Multiclassification Constraints for Infrared and Visible Image Fusion Paper Code TIM GAN 无监督 2021 MgAN-Fuse Multigrained Attention Network for Infrared and Visible Image Fusion Paper TIM GAN 无监督 2021 TC-GAN Infrared and Visible Image Fusion via Texture Conditional Generative Adversarial Network Paper TCSVT GAN 无监督 2021 TarDAL Target-aware Dual Adversarial Learning and a Multi-scenario Multi-Modality Benchmark to Fuse Infrared and Visible for Object Detection Paper Code CVPR GAN 无监督 2022 RFNet RFNet: Unsupervised Network for Mutually Reinforcing Multi-modal Image Registration and Fusion Paper Code CVPR CNN 无监督 2022 SeAFusion Image fusion in the loop of high-level vision tasks: A semantic-aware real-time infrared and visible image fusion network Paper Code InfFus CNN 无监督 2022 PIAFusion PIAFusion: A progressive infrared and visible image fusion network based on illumination aware Paper Code InfFus CNN 无监督 2022 UMF-CMGR Unsupervised Misaligned Infrared and Visible Image Fusion via Cross-Modality Image Generation and Registration Paper Code IJCAI CNN 无监督 2022 医学图像融合(Medical image fusion) 方法 标题 论文 代码 发表期刊或会议 基础框架 监督范式 年份 CNN A medical image fusion method based on convolutional neural networks Paper ICIF CNN 无监督 2017 Zero-LMF Zero-Learning Fast Medical Image Fusion Paper Code ICIF CNN 无监督 2019 DDcGAN Learning a Generative Model for Fusing Infrared and Visible Images via Conditional Generative Adversarial Network with Dual Discriminators Paper Code IJCAI GAN 无监督 2019 GFPPC-GAN Green Fluorescent Protein and Phase-Contrast Image Fusion via Generative Adversarial Networks Paper CMMM GAN 无监督 2019 CCN-CP Multi-modality medical image fusion using convolutional neural network and contrast pyramid Paper Sensors CNN 无监督 2020 DDcGAN DDcGAN: A Dual-Discriminator Conditional Generative Adversarial Network for Multi-Resolution Image Fusion Paper Code TIP GAN 无监督 2020 MGMDcGAN Medical Image Fusion Using Multi-Generator Multi-Discriminator Conditional Generative Adversarial Network Paper Code Access GAN 无监督 2020 D2LE A Bilevel Integrated Model With Data-Driven Layer Ensemble for Multi-Modality Image Fusion Paper TIP CNN 无监督 2021 HAF Searching a Hierarchically Aggregated Fusion Architecture for Fast Multi-Modality Image Fusion Paper Code ACM MM CNN 无监督 2021 EMFusion EMFusion: An unsupervised enhanced medical image fusion network Paper Code InfFus CNN 无监督 2021 DPCN-Fusion Green Fluorescent Protein and Phase Contrast Image Fusion Via Detail Preserving Cross Network Paper Code TCI CNN 无监督 2021 MSPRN A multiscale residual pyramid attention network for medical image fusion Paper Code BSPC CNN 无监督 2021 DCGAN Medical image fusion method based on dense block and deep convolutional generative adversarial network Paper NCA GAN 无监督 2021 数字摄影图像融合(Digital Photography Image Fusion) 多曝光图像融合(Multi-exposure image fusion) 方法 标题 论文 代码 发表期刊或会议 基础框架 监督范式 年份 DeepFuse DeepFuse: A Deep Unsupervised Approach for Exposure Fusion with Extreme Exposure Image Pairs Paper Code ICCV CNN 无监督 2017 CNN Multi-exposure fusion with CNN features Paper Code ICIP CNN 无监督 2018 MEF-Net Deep guided learning for fast multi-exposure image fusion Paper Code TIP CNN 无监督 2020 ICEN Multi-exposure high dynamic range imaging with informative content enhanced network Paper NC CNN 无监督 2020 MEF-GAN MEF-GAN: Multi-Exposure Image Fusion via Generative Adversarial Networks Paper Code TIP GAN 无监督 2020 CF-Net Deep coupled feedback network for joint exposure fusion and image super-resolutions Paper Code TIP CNN 无监督 2021 UMEF Deep unsupervised learning based on color un-referenced loss functions for multi-exposure image fusion Paper Code InFus CNN 无监督 2021 PA-AGN Two exposure fusion using prior-aware generative adversarial network Paper TMM GAN 无监督 2021 AGAL Attention-guided Global-local Adversarial Learning for Detail-preserving Multi-exposure Image Fusion Paper Code TCSVT GAN 无监督 2022 GANFuse GANFuse: a novel multi-exposure image fusion method based on generative adversarial networks Paper NCAA GAN 无监督 2021 DRLF Automatic Intermediate Generation With Deep Reinforcement Learning for Robust Two-Exposure Image Fusion Paper TNNLS CNN 无监督 2021 Trans-MEF TransMEF: A Transformer-Based Multi-Exposure Image Fusion Framework using Self-Supervised Multi-Task Learning Paper Code AAAI AE 自监督 2022 DPE-MEF Multi-exposure image fusion via deep perceptual enhancement Paper Code InFus CNN 无监督 2022 多聚焦图像融合(Multi-focus image fusion) 方法 标题 论文 代码 发表期刊或会议 基础框架 监督范式 年份 CNN Multi-focus image fusion with a deep convolutional neural network Paper Code InFus CNN 有监督 2017 ECNN Ensemble of CNN for multi-focus image fusion Paper Code InFus CNN 有监督 2019 MLFCNN Multilevel features convolutional neural network for multifocus image fusion Paper TCI CNN 有监督 2019 DRPL DRPL: Deep Regression Pair Learning for Multi-Focus Image Fusion Paper Code TIP CNN 有监督 2020 MMF-Net An α-Matte Boundary Defocus Model-Based Cascaded Network for Multi-Focus Image Fusion Paper Code TCI CNN 有监督 2020 MFF-SSIM Towards Reducing Severe Defocus Spread Effects for Multi-Focus Image Fusion via an Optimization Based Strategy Paper Code Sensors CNN 无监督 2020 MFNet Structural Similarity Loss for Learning to Fuse Multi-Focus Images Paper TIP CNN 有监督 2021 GEU-Net Global-Feature Encoding U-Net (GEU-Net) for Multi-Focus Image Fusion [GEU-Net Paper Code TCI CNN 自监督 2021 DTMNet DTMNet: A Discrete Tchebichef Moments-Based Deep Neural Network for Multi-Focus Image Fusion Paper TMM CNN 无监督 2021 SMFuse SMFuse: Multi-Focus Image Fusion Via Self-Supervised Mask-Optimization Paper Code NCA CNN 无监督 2021 ACGAN A generative adversarial network with adaptive constraints for multi-focus image fusion Paper Code ICCV GAN 有监督 2021 FuseGAN Learning to fuse multi-focus image via conditional generative adversarial network Paper TIP GAN 有监督 2020 D2FMIF Depth-Distilled Multi-focus Image Fusion Paper TMM CNN 有监督 2019 SESF-Fuse SESF-Fuse: an unsupervised deep model for multi-focus image fusion Paper Code NCAA CNN 有监督 2020 MFF-GAN MFF-GAN: An unsupervised generative adversarial network with adaptive and gradient joint constraints for multi-focus image fusion Paper Code InFus GAN 无监督 2021 MFIF-GAN MFIF-GAN: A new generative adversarial network for multi-focus image fusion Paper Code SPIC GAN 有监督 2021 遥感影像融合(Remote Sensing Image Fusion) 全色图像锐化(Pansharpening) 方法 标题 论文 代码 发表期刊或会议 基础框架 监督范式 年份 PNN Pansharpening by Convolutional Neural Networks Paper Code RS CNN 有监督 2016 PanNet PanNet: A deep network architecture for pan-sharpening Paper Code PanNet CNN 有监督 2017 TFNet Remote sensing image fusion based on two-stream fusion network Paper Code TFNet CNN 有监督 2020 BKL Unsupervised Blur Kernel Learning for Pansharpening Paper IGARSS CNN 无监督 2020 Pan-GAN Pan-GAN: An unsupervised pan-sharpening method for remote sensing image fusion Paper Code InFus GAN 无监督 2020 UCNN Pansharpening via Unsupervised Convolutional Neural Networks Paper JSTARS CNN 无监督 2020 UPSNet UPSNet: Unsupervised Pan-Sharpening Network With Registration Learning Between Panchromatic and Multi-Spectral Images Paper ACCESS CNN 无监督 2020 GPPNN Deep Gradient Projection Networks for Pan-sharpening Paper Code CVPR CNN 有监督 2021 GTP-PNet GTP-PNet: A residual learning network based on gradient transformation prior for pansharpening Paper Code ISPRS CNN 有监督 2021 HMCNN Pan-Sharpening Via High-Pass Modification Convolutional Neural Network Paper Code ICIP CNN 有监督 2021 SDPNet SDPNet: A Deep Network for Pan-Sharpening With Enhanced Information Representation Paper Code TGRS CNN 有监督 2021 SIPSA-Net SIPSA-Net: Shift-Invariant Pan Sharpening with Moving Object Alignment for Satellite Imagery Paper Code CVPR CNN 有监督 2021 SRPPNN Super-resolution-guided progressive pansharpening based on a deep convolutional neural network Paper Code TGRS CNN 有监督 2021 PSGAN PSGAN: A generative adversarial network for remote sensing image pan-sharpening Paper Code TGRS GAN 有监督 2021 MDCNN MDCNN: multispectral pansharpening based on a multiscale dilated convolutional neural network Paper JRS CNN 有监督 2021 LDP-Net LDP-Net: An Unsupervised Pansharpening Network Based on Learnable Degradation Processes Paper Code Arxiv CNN 无监督 2021 DIGAN Pansharpening approach via two-stream detail injection based on relativistic generative adversarial networks Paper ESA GAN 有监督 2022 DPFN A Dual-Path Fusion Network for Pan-Sharpening Paper Code TGRS CNN 有监督 2022 MSGAN An Unsupervised Multi-scale Generative Adversarial Network for Remote Sensing Image Pan-Sharpening Paper ICMM GAN 无监督 2022 UCGAN Unsupervised Cycle-Consistent Generative Adversarial Networks for Pan Sharpening Paper Code TGRS GAN 无监督 2022 通用图像融合框架(General Image Fusion Framerwork) 方法 标题 论文 代码 发表期刊或会议 基础框架 监督范式 年份 IFCNN IFCNN: A general image fusion framework based on convolutional neural network Paper Code InFus CNN 有监督 2020 FusionDN FusionDN: A Unified Densely Connected Network for Image Fusion Paper Code AAAI CNN 无监督 2020 PMGI Rethinking the Image Fusion: A Fast Unified Image Fusion Network based on Proportional Maintenance of Gradient and Intensity Paper Code AAAI CNN 无监督 2020 CU-Net Deep Convolutional Neural Network for Multi-Modal Image Restoration and Fusion Paper Code TPAMI CNN 有监督 2021 SDNet SDNet: A Versatile Squeeze-and-Decomposition Network for Real-Time Image Fusion Paper Code IJCV CNN 无监督 2021 DIF-Net Unsupervised Deep Image Fusion With Structure Tensor Representations Paper Code TIP CNN 无监督 2021 IFSepR IFSepR: A general framework for image fusion based on separate representation learning Paper TMM AE 自监督 2021 MTOE Multiple Task-Oriented Encoders for Unified Image Fusion Paper ICME CNN 无监督 2021 U2Fusion U2Fusion: A Unified Unsupervised Image Fusion Network Paper Code TPAMI CNN 无监督 2022 SwinFusion SwinFusion: Cross-domain Long-range Learning for General Image Fusion via Swin Transformer Paper Code JAS Transformer 无监督 2022 综述(Survey) 标题 论文 代码 发表期刊或会议 年份 A review of remote sensing image fusion methods Paper InFus 2016 Pixel-level image fusion: A survey of the state of the art Paper InFus 2017 Deep learning for pixel-level image fusion: Recent advances and future prospects Paper InFus 2018 Infrared and visible image fusion methods and applications: A survey Paper InFus 2019 Multi-focu image fusion: A Survey of the state of the art Paper InFus 2020 Image fusion meets deep learning: A survey and perspective Paper InFus 2021 Deep Learning-based Multi-focus Image Fusion: A Survey and A Comparative Study Paper Code TPAMI 2021 Benchmarking and comparing multi-exposure image fusion algorithms Paper Code InFus 2021 数据集(Dataset) 融合场景 数据集 下载链接 红外和可见光图像融合 TNO https://figshare.com/articles/dataset/TNO_Image_Fusion_Dataset/1008029 INO https://www.ino.ca/en/technologies/video-analytics-dataset/videos/ RoadScene https://github.com/hanna-xu/RoadScene MSRS https://github.com/Linfeng-Tang/MSRS LLVIP https://bupt-ai-cz.github.io/LLVIP/ M3FD https://github.com/JinyuanLiu-CV/TarDAL 医学图像融合 Harvard http://www.med.harvard.edu/AANLIB/home.html 多曝光图像融合 MEF https://github.com/csjcai/SICE MEFB https://github.com/xingchenzhang/MEFB 多聚焦图像融合 Lytro https://mansournejati.ece.iut.ac.ir/content/lytro-multi-focus-dataset MFI-WHU https://github.com/HaoZhang1018/MFI-WHU MFFW https://www.semanticscholar.org/paper/MFFW:-A-new-dataset-for-multi-focus-image-fusion-Xu-Wei/4c0658f338849284ee4251a69b3c323908e62b45 全色图像锐化 GaoFen https://directory.eoportal.org/web/eoportal/satellite-missions/g WorldView https://worldview.earthdata.nasa.gov/ GeoEye https://earth.esa.int/eogateway/missions/geoeye-1 QuickBird https://www.satimagingcorp.com/satellite-sensors/quickbird/ 评估指标(Evaluation Metric) 通用评估指标(General evaluation metric) 通用评估指标位于:https://github.com/Linfeng-Tang/Image-Fusion/tree/main/General%20Evaluation%20Metric or https://github.com/Linfeng-Tang/Evaluation-for-Image-Fusion 遥感影像融合评估指标(Evaluation metric for pansharpening) 如果有任何问题请联系:2458707749 ———————————————— 版权声明:本文为CSDN博主「Timer-419」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/fovever_/article/details/124650534
-
摘要:介绍如何用昇腾AI处理器上的DVPP单元进行,图像的等比例缩放,保证图像不变形。本文分享自华为云社区《CANN DVPP进行图片的等比例缩放》,作者:马城林 。1. 为什么需要进行等比例的缩放,直接暴力缩放成模型需要的宽高岂不是更省事首先没有任何的规定表示我们必须进行等比例的缩放,因为实际上即使图像上的物体因为缩放而变形,物体本身的特征还是存在,神经网络依旧可以提取对应的特征进而预测出物体的位置,通过计算实际的宽高与模型之间的宽高的比例依旧可以将模型预测到的候选框的映射到实际的原图上。这样看来等比例的缩放存在感好低!但是事情真的是这样吗?肯定不是呀,要不我为啥会写这篇博客呢?首先有以下几点考虑:目标检测除了将图像送入模型,实际上物体在图像中的位置也被作为一部分信息参与了模型的训练,经过等比例缩放的图片在坐标转换上明显省事。有些图像经过非等比例压缩后已经与实际场景中的物体差别很大,严重的变形会干扰到模型的准确性。等比例缩放更加符合我们人类的直觉。2. 如何在昇腾AI处理器上进行等比例缩放如果在我们的训练服务器,或者我们自己的个人计算机上,因为计算能力的相对充沛,我们可以借助很多开源图像库例如opencv,pillow等进行图像的等比例缩放。但是一旦道路端侧部署时这些开源图像库的方法往往成为整个推理过程最耗时的部分,因为他们主要通过CPU进行运算,而在诸如200DK这样的环境上,进行这样的变换让本就不充沛的CPU算力雪上加霜。而昇腾AI处理器上拥有专门处理数字图像的硬件单元。所以如何借助这些专用的硬件单元是十分重要的。话不多说开始吧!3. 实战讲解主要从以下几个方面进行讲解步骤分解每一步在昇腾AI处理器上的实现怎么把几步组合起来完成一个完整的动作介绍 AscendCL 为开发者提供的组合API接口,只需要一个函数完成所有动作,想想都刺激<概念注意>昇腾AI处理器在不同的环境上拥有不同运行模式,常见的分为两种,一种是类似于显卡一样插在服务器的PCIE插槽上,提供加速服务,一种是类似于200DK一样的嵌入式环境。工作在服务器的PCIE插槽上的昇腾310内存有两种存在形态,一种就是我们常见的内存,称为host内存。一种类似于显卡的显存,称为device内存,这种状态下需要涉及到内存拷贝的问题。200DK这种环境,不区分host与device,只有一块device内存,所以并不涉及host与device的内存拷贝问题媒体数据处理描述图形的大小,主要有两种表示方法,width,height,表示图像的真实宽高,widthstride,heightstride表示图像在内存中对其到128,16,2后的宽高,内存宽高标识图像在内存中的位置(但是可能有为了填充而产生的无效数据),真实宽高就标识内存中真实有效的数据。JPEG Decode时对JPEG的源图像没有宽高的要求,但是输出的数据,宽会对齐到128,长会对齐到16,对齐后可能会产生一部分的无效数据。VPC 图像缩放,抠图,贴图对输入的源图像宽高对齐到2,对齐后的内存宽高为,宽对齐到16,高对齐到2,输出与输入约束条件相同JPEG Encode 对输入的源图像宽高对齐到2,对齐后的内存宽高为,宽对齐到16或者16的倍数(128时性能更好),高对齐到16。详细的约束对齐规则JPEG DecodeVPCJPEG Encode3.1 步骤分解很多朋友和我一样属于一听就会,一动手就废的类型,在脑海里勾勒出万里江山,实际一上手,我是个傻子。。。。。实际上是我们还没有掌握做事情的诀窍,就是把事情分解成可以很方便用代码描述出的步骤;计算机编程让人感到头皮发麻的一个重要原因就是计算机它只会一步一步来,不会跳步。所以我们脑海里面很简单的步骤在编程实现后也可能代码很长。将常见的JPEG图片解码成YUV格式的图片aclError acldvppJpegDecodeAsync(acldvppChannelDesc *channelDesc, const void *data, uint32_t size, acldvppPicDesc *outputDesc,aclrtStream stream)因为JPEG解码有128x16的对齐要求,所以解码后的数据边缘会出现无效数据,需要进行裁剪aclError acldvppVpcCropAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, aclrtStream stream)进行resize的操作,没有对应的等比例缩放的接口,但是如果我们最后指定的图像大小相对于原图是等比例的,就是等比例缩放aclError acldvppVpcResizeAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppResizeConfig *resizeConfig, aclrtStream stream)进行等比例缩放时需要一个,与模型大小一致的纯色背景图片作为贴图的背景,我们可以申请对应大小的一些区域然后,将对应区域全部赋值为同一个数。aclError aclrtMemset (void *devPtr, size_t maxCount, int32_t value, size_t count)进行贴图aclError acldvppVpcCropAndPasteAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, acldvppRoiConfig *pasteArea, aclrtStream stream)进行模型推理或编码保存3.2 对应的变量怎么声明与初始化DVPP处理的通道的声明与销毁DVPP的一系列操作都是建立在已经声明初始化的通道上,你可以理解为初始化了相关的硬件资源acldvppChannelDesc *channelDesc channelDesc = acldvppCreateChannelDesc(); aclError ret = acldvppCreateChannel(channelDesc); // 销毁与创建的顺序相反 acldvppDestroyChannel(channelDesc); acldvppDestroyChannelDesc(channelDesc);各种图像的操作描述对应的图像的描述信息的创建与销毁acldvppPicDesc *picDesc picDesc = acldvppCreatePicDesc(); acldvppSetPicDescData(picDesc, decodeOutDevBuffer_); // 图像的内存地址 acldvppSetPicDescSize(picDesc, decodeOutBufferSize); // 图像所占的内存大小 acldvppSetPicDescFormat(picDesc, PIXEL_FORMAT_YUV_SEMIPLANAR_420); // 图像的格式 acldvppSetPicDescWidth(picDesc, inputWidth_); // 图像的实际宽 acldvppSetPicDescHeight(picDesc, inputHeight_); // 图像的实际高 acldvppSetPicDescWidthStride(picDesc, decodeOutWidthStride); // 图像在内存中对齐后的宽 acldvppSetPicDescHeightStride(picDesc, decodeOutHeightStride); // 图像在内存中对齐后的高 // 销毁 acldvppDestroyPicDesc(picDesc);申请内存// device侧,200DK等只有device内存的也用此接口,且只用此接口 aclError aclrtMalloc(void **devPtr, size_t size, aclrtMemMallocPolicy policy) aclError aclrtFree(void *devPtr) // host侧 aclError aclrtMallocHost(void **hostPtr, size_t size) aclError aclrtFreeHost(void *hostPtr) // dvpp 内存(在device侧,因为需要内存地址128对齐,所以拥有单独的接口) aclError acldvppMalloc(void **devPtr, size_t size) aclError acldvppFree(void *devPtr)创建抠图,贴图的区域acldvppRoiConfig *acldvppCreateRoiConfig(uint32_t left, uint32_t right, uint32_t top, uint32_t bottom) // 销毁 aclError acldvppDestroyRoiConfig(acldvppRoiConfig *roiConfig)不知道图片的相关信息获取信息的接口// 通过此接口可以方便的获取JPEG图像的宽,高,色彩通道数,编码格式,只需要传入对应的JPEG源数据地址以及大小 aclError acldvppJpegGetImageInfoV2(const void *data, uint32_t size, uint32_t *width, uint32_t *height, int32_t *components, acldvppJpegFormat *format) // 获取JPEG图片解码后的数据大小,因为解码后会对齐到128,所以不能任何时候都简单地依据原图大小计算解码后占用的内存大小。 aclError acldvppJpegPredictDecSize(const void *data, uint32_t dataSize, acldvppPixelFormat outputPixelFormat, uint32_t *decSize) // 获取PNG图像的宽和高 aclError acldvppPngGetImageInfo(const void *data, uint32_t dataSize, uint32_t *width, uint32_t *height, int32_t *components) // 预测PNG图片解码后占用内存空间 aclError acldvppPngPredictDecSize(const void *data, uint32_t dataSize, acldvppPixelFormat outputPixelFormat, uint32_t *decSize) // 获取JPEG图像编码后的占用内存空间 aclError acldvppJpegPredictEncSize(const acldvppPicDesc *inputDesc, const acldvppJpegeConfig *config, uint32_t *size)图像缩放,贴图,抠图相关的接口(当有多个操作动作时建议使用组合接口,虽然看似是多个步骤,实际上硬件内部只是执行一次操作可以大幅度提升处理的效率)// 缩放接口,单一接口,将缩放后的图片作为输出 aclError acldvppVpcResizeAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppResizeConfig *resizeConfig, aclrtStream stream) // 抠图接口,单一接口,从原图中根据ROI区域抠出一部分作为输出 aclError acldvppVpcCropAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, aclrtStream stream) // 组合接口(抠图+缩放),应用场景:JPEG 解码后的图片中可能有无效的数据,直接缩放到模型需要的大小会把无效数据一起输入,可以先把真实图像的数据抠出来然后进行缩放,减少无效的数据干扰。 aclError acldvppVpcCropResizeAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, acldvppResizeConfig *resizeConfig, aclrtStream stream) // 组合接口(抠图+贴图 / 抠图+缩放+贴图)如果抠图与贴图的大小不一致会进行一步缩放操作。 aclError acldvppVpcCropAndPasteAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, acldvppRoiConfig *pasteArea, aclrtStream stream) // 组合接口(抠图+贴图 / 抠图+缩放+贴图)此接口功能与上一个是一致的,但是此接口可以指定不同的缩放算法 aclError acldvppVpcCropResizePasteAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, acldvppRoiConfig *pasteArea, acldvppResizeConfig *resizeConfig, aclrtStream stream)3.3 实战讲解效果展示:1024x688 =》 416x416// 定义一些全局变量 namespace { std::string aclConfig = "../src/acl.json"; const std::string image_path = "../data/dog2.jpg"; const std::string image_save_path = "../out/dog2.jpg"; int32_t deviceId = 0; aclrtContext context; aclrtStream stream; aclrtRunMode runMode_ = ACL_DEVICE; uint32_t model_width = 416; // 模型需要的图像宽 uint32_t model_height = 416; // 模型需要的图像高 uint32_t image_width = 0; // 图像的真实宽 uint32_t image_height = 0; // 图像的真实高 acldvppChannelDesc *dvppChannelDesc = nullptr; }开始进行解码操作// 将图片读入内存,如果运行模式为(ACL_HOST)模式,需要申请host侧内存存放我们的原始图片数据,然后申请相同大小的device内存拷贝过去。如果运行在(ACL_DEVICE)模式,例如200DK这样的场景,直接申请device内存,不需要进行内存的拷贝搬运。 // 经过读取图片的步骤我们应该能获得如下变量 void* JpegImagePtr; // 原始图像在device侧的内存地址(不管运行在那种方式下的昇腾软件栈都是如此) uint32_t JpegImageSize; // 原始图像的大小 // 我们不了解图像的编码以及真实宽高,还有颜色通道数,所以需要执行获取图像信息的接口 // 图像的原始宽高变量我们前面已经定义过, 所以我们现在只需要定义图像的通道数与编码方式还有图像解码后所占用的内存的大小 int32_t components; // 图像的通道数 acldvppJpegFormat format; // 图像的编码方式 uint32_t JpegdOutSize; void* JpegdOutPtr; aclError ret = acldvppJpegGetImageInfoV2(JpegImagePtr, JpegImageSize, &image_width, &height, &components, &format) aclError ret = acldvppJpegPredictDecSize(JpegImagePtr, JpegImageSize, format, &JpegdOutSize) // 申请存放解码后YUV图像的内存 aclError ret = acldvppMalloc(&JpegdOutPtr, JpegdOutSize); // 设置JPEG解码后图像的描述信息(注意JPEG解码后内存宽高对齐到128x16) acldvppPicDesc* JpegdOutputPicDesc = acldvppCreatePicDesc(); acldvppSetPicDescData(out_pic_desc, JpegdOutPtr); acldvppSetPicDescSize(out_pic_desc, JpegdOutSize); acldvppSetPicDescFormat(out_pic_desc, PIXEL_FORMAT_YUV_SEMIPLANAR_420); acldvppSetPicDescWidth(out_pic_desc, image_width); acldvppSetPicDescHeight(out_pic_desc, image_height); acldvppSetPicDescWidthStride(out_pic_desc, ALIGN_UP128(image_width)); acldvppSetPicDescHeightStride(out_pic_desc, ALIGN_UP16(image_height)); // 执行解码接口 ret = acldvppJpegDecodeAsync(dvppChannelDesc, JpegImagePtr, JpegImageSize, JpegdOutputPicDesc, stream); ret = aclrtSynchronizeStream(stream_);开始进行抠图的操作,因为我们这次需要执行抠图+缩放+贴图三个动作所以我们选择组合API进行编程// 首先声明原图抠图的区域 // 抠图的区域左偏移和上偏移都是偶数 // 抠图的区域右偏移和下偏移都是奇数 uint32_t left = 0; uint32_t top = 0; uint32_t right = image_width % 2 == 0 ? image_width-1 : image_width; uint32_t bottom = image_height % 2 == 0 ? image_height-1 : image_height; acldvppRoiConfig* cropArea = cropConfig = acldvppCreateRoiConfig(left, right, top, bottom); // 计算等比例缩放后的新的宽高(等比例缩放后可能不满足16x2的对齐规则,需要手动进行对齐的操作) void LargeSizeAtLeast(uint32_t W, uint32_t H, uint32_t &newInputWidth, uint32_t &newInputHeight) { INFO_LOG("W:%u H:%u nw:%u, nh:%u", W, H, newInputWidth, newInputHeight); float scaleRatio = 0.0; float inputWidth = 0.0; float inputHeight = 0.0; float resizeMax = 0.0; bool maxWidthFlag = false; inputWidth = (float)W; inputHeight = (float)H; resizeMax = (float)(416); maxWidthFlag = (W >= H) ? true : false; if (maxWidthFlag == true) { newInputWidth = resizeMax; scaleRatio = resizeMax / W; // 高度2对齐 newInputHeight = scaleRatio * H; newInputHeight = ALIGN_UP2(newInputHeight); INFO_LOG("scaleRatio: %.3f, modelInputWidth: %u, modelInputHeight: %d, newInputWidth: %d, newInputHeight: %d", scaleRatio, W, H, newInputWidth, newInputHeight); } else { scaleRatio = resizeMax / H; // 如果高度是长边,建议宽度在等比例缩放后再做一次16对齐。因为vpc在输出时宽有16字节对齐约束,当贴图的宽非16对齐时,会导致在贴图的时候, // 芯片会自动进行16字节对齐,导致每次写入数据的时候都会引入部分无效数据,从而导致精度下降。 newInputWidth = scaleRatio * W; newInputWidth = ALIGN_UP16(newInputWidth); newInputHeight = resizeMax; INFO_LOG("scaleRatio: %.3f, modelInputWidth: %u, modelInputHeight: %d, newInputWidth: %d, newInputHeight: %d", scaleRatio, W, H, newInputWidth, newInputHeight); } } // 设置贴图的范围左偏移要求16对齐 acldvppRoiConfig *InitVpcOutConfig(uint32_t width, uint32_t height, uint32_t modelInputWidth, uint32_t modelInputHeight) { uint32_t right = 0; uint32_t bottom = 0; uint32_t left = 0; uint32_t top = 0; uint32_t left_stride; acldvppRoiConfig *cropConfig; uint32_t small = width < height ? width : height; uint32_t padded_size_half; if (small == width) { padded_size_half = (modelInputWidth - width) / 2; // 贴图区域距离左边界的距离 left = padded_size_half; left_stride = ALIGN_UP16(left); right = (left_stride + width) % 2 == 0 ? (left_stride + width - 1) : (left_stride + width); if (left_stride + right > modelInputWidth) { while (true) { left_stride = left_stride - 16; right = (left_stride + width) % 2 == 0 ? (left_stride + width - 1) : (left_stride + width); if (left_stride + right < modelInputWidth) break; } } right = (left_stride + width) % 2 == 0 ? (left_stride + width - 1) : (left_stride + width); bottom = (modelInputHeight % 2 == 0 ? modelInputHeight - 1 : modelInputHeight); top = bottom - height + 1; } else { padded_size_half = (modelInputHeight - height) / 2; right = (modelInputWidth % 2 == 0 ? modelInputWidth - 1 : modelInputWidth); left = right + 1 - width; left_stride = ALIGN_UP16(left); top = (padded_size_half % 2 == 0 ? padded_size_half : padded_size_half + 1); bottom = (height + top - 1) % 2 == 0 ? (height + top - 2) : (height + top - 1); } INFO_LOG("left_stride=%d, right=%d, top=%d, bottom=Ð7557a86-c79e-418c-bc75-fa080612ce7dn", left_stride, right, top, bottom); cropConfig = acldvppCreateRoiConfig(left_stride, right, top, bottom); if (cropConfig == nullptr) { ERROR_LOG("acldvppCreateRoiConfig failed"); return nullptr; } return cropConfig; } // 设置最后完成等比例缩放后的图像的信息 void* output_ptr = nullptr; uint32_t output_size = YUV420SP_SIZE(ALIGN_UP16(model_width), ALIGN_UP2(model_height)); ret = acldvppMalloc(&output_ptr, output_size); // 申请模板内存 if (ret != ACL_SUCCESS) { ERROR_LOG("acl malloc output is failed"); } ret = aclrtMemset(output_ptr, output_size, 128, output_size); if (ret != ACL_SUCCESS) { ERROR_LOG("mem set 128 is failed"); } acldvppPicDesc *output_Desc = acldvppCreatePicDesc(); acldvppSetPicDescData(output_Desc, output_ptr); acldvppSetPicDescSize(output_Desc, output_size); acldvppSetPicDescFormat(output_Desc, PIXEL_FORMAT_YUV_SEMIPLANAR_420); acldvppSetPicDescWidth(output_Desc, model_width); acldvppSetPicDescHeight(output_Desc, model_height); acldvppSetPicDescWidthStride(output_Desc, ALIGN_UP16(model_width)); acldvppSetPicDescHeightStride(output_Desc, ALIGN_UP2(model_height)); // 执行裁剪加贴图的操作 ret = acldvppVpcCropAndPasteAsync(dvppChannelDesc, JpegdOutputPicDesc, output_Desc, cropArea, pasteArea, stream);完成了一系列的操作总结对于DVPP处理来说,单独的接口调用需要全部满足输入和输出的长宽以及对齐的要求但是对于 JPEG+VPC 这样的串联编程来说前一个组件的输出图像描述是后一个组件的输入描述,设定对齐内存是为了有效标定,图像在内存中的位置,如果固执的设定对齐后的值,对于后一个组件来说很有可能得到的输入是有缺失的信息。根据众多对齐要求我们可以看出,对于图像的原始宽高全部2对齐是一个比较好的习惯,而且常用的图像规格都是偶数例如1920x1080,1280x720, 640x640, 416x416,最好不要出现长或者宽为奇数的情况,因为硬件会自动为奇数进行对齐从而产生无效数据。增加了处理的难度。
-
摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现。本文分享自华为云社区《[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算》,作者: eastmount。本篇文章继续深入,结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现。一.图像顶帽运算图像顶帽运算(top-hat transformation)又称为图像礼帽运算,它是用原始图像减去图像开运算后的结果,常用于解决由于光照不均匀图像分割出错的问题。其公式定义如下:图像顶帽运算是用一个结构元通过开运算从一幅图像中删除物体,校正不均匀光照的影响,其效果图如下图所示。在Python中,图像顶帽运算主要调用morphologyEx()实现,其中参数cv2.MORPH_TOPHAT表示顶帽处理,函数原型如下:dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)src表示原始图像cv2.MORPH_TOPHAT表示图像顶帽运算kernel表示卷积核,可以用numpy.ones()函数构建假设存在一张光照不均匀的米粒图像,如图所示,我们需要调用图像顶帽运算解决光照不均匀的问题。其Python代码如下所示:#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test06.png', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((10,10), np.uint8) #图像顶帽运算 result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()其运行结果如下,它有效地将米粒与背景分离开来。二.图像黑帽运算图像底帽运算(bottom-hat transformation)又称为图像黑帽运算,它是用图像闭运算操作减去原始图像后的结果,从而获取图像内部的小孔或前景色中黑点,也常用于解决由于光照不均匀图像分割出错的问题。其公式定义如下:图像底帽运算是用一个结构元通过闭运算从一幅图像中删除物体,常用于校正不均匀光照的影响。其效果图如下图所示。在Python中,图像底帽运算主要调用morphologyEx()实现,其中参数cv2.MORPH_BLACKHAT表示底帽或黑帽处理,函数原型如下:dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)src表示原始图像cv2.MORPH_BLACKHAT表示图像底帽或黑帽运算kernel表示卷积核,可以用numpy.ones()函数构建Python实现图像底帽运算的代码如下所示:#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test06.png', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((10, 10), np.uint8) #图像黑帽运算 result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()其运行结果如图所示:三.基于灰度三维图的顶帽黑帽运算为什么图像顶帽运算会消除光照不均匀的效果呢?通常可以利用灰度三维图来进行解释该算法。灰度三维图主要调用Axes3D包实现,对原图绘制灰度三维图的代码如下:# -*- coding: utf-8 -*- import numpy as np import cv2 as cv import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter #读取图像 img = cv.imread("test06.png") img = cv.cvtColor(img,cv.COLOR_BGR2GRAY) imgd = np.array(img) #image类转numpy #准备数据 sp = img.shape h = int(sp[0]) #图像高度(rows) w = int(sp[1]) #图像宽度(colums) of image #绘图初始处理 fig = plt.figure(figsize=(16,12)) ax = fig.gca(projection="3d") x = np.arange(0, w, 1) y = np.arange(0, h, 1) x, y = np.meshgrid(x,y) z = imgd surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm) #自定义z轴 ax.set_zlim(-10, 255) ax.zaxis.set_major_locator(LinearLocator(10)) #设置z轴网格线的疏密 #将z的value字符串转为float并保留2位小数 ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # 设置坐标轴的label和标题 ax.set_xlabel('x', size=15) ax.set_ylabel('y', size=15) ax.set_zlabel('z', size=15) ax.set_title("surface plot", weight='bold', size=20) #添加右侧的色卡条 fig.colorbar(surf, shrink=0.6, aspect=8) plt.show()运行结果如下图所示:从图像中的像素走势显示了该图受各部分光照不均匀的影响,从而造成背景灰度不均现象,其中凹陷对应图像中灰度值比较小的区域。而通过图像白帽运算后的图像灰度三维图的代码如下:# -*- coding: utf-8 -*- import numpy as np import cv2 as cv import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter #读取图像 img = cv.imread("test06.png") img = cv.cvtColor(img,cv.COLOR_BGR2GRAY) #图像黑帽运算 kernel = np.ones((10,10), np.uint8) result = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel) #image类转numpy imgd = np.array(result) #准备数据 sp = result.shape h = int(sp[0]) #图像高度(rows) w = int(sp[1]) #图像宽度(colums) of image #绘图初始处理 fig = plt.figure(figsize=(8,6)) ax = fig.gca(projection="3d") x = np.arange(0, w, 1) y = np.arange(0, h, 1) x, y = np.meshgrid(x,y) z = imgd surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm) #自定义z轴 ax.set_zlim(-10, 255) ax.zaxis.set_major_locator(LinearLocator(10)) #设置z轴网格线的疏密 #将z的value字符串转为float并保留2位小数 ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # 设置坐标轴的label和标题 ax.set_xlabel('x', size=15) ax.set_ylabel('y', size=15) ax.set_zlabel('z', size=15) ax.set_title("surface plot", weight='bold', size=20) #添加右侧的色卡条 fig.colorbar(surf, shrink=0.6, aspect=8) plt.show()效果图如下所示,对应的灰度更集中于10至100区间,由此证明了不均匀的背景被大致消除了,有利于后续的阈值分割或图像分割。
-
【摘要】 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算、图像闭运算和梯度运算,基础性知识希望对您有所帮助。本文分享自华为云社区《[Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算》,作者:eastmount。该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算、图像闭运算和梯度运算,基础性知识希望对您有所帮助。1.图像开运算2.图像闭运算3.图像梯度运算一. 图像开运算1.基本原理图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:开运算(img) = 膨胀( 腐蚀(img) ) 下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。https://blog.csdn.net/hanshanbuleng/article/details/806571482.函数原型图像开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。其原型如下:dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)参数dst表示处理的结果,src表示原图像,cv2.MORPH_OPEN表示开运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。运行结果如下图所示:3.代码实现完整代码如下所示:#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((5,5), np.uint8) #图像开运算 result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()输出结果如下图所示,可以看到噪声已经被去除了。但是结果result中仍然有部分噪声,如果想去除更彻底将卷积设置为10*10的。kernel = np.ones((10,10), np.uint8)result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)二. 图像闭运算1.基本原理图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:闭运算(img) = 腐蚀( 膨胀(img) ) 下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。2.函数原型图像闭运算主要使用的函数morphologyEx,其原型如下:dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)参数dst表示处理的结果,src表示原图像, cv2.MORPH_CLOSE表示闭运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。运行结果如下图所示:3.代码实现完整代码如下所示:#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test03.png', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((10,10), np.uint8) #图像闭运算 result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()输出结果如下图所示,可以看到中间的噪声去掉。三. 图像梯度运算1.基本原理图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。如下图所示:梯度运算(img) = 膨胀(img) - 腐蚀(img) 2.函数原型图像梯度运算主要使用的函数morphologyEx,参数为cv2.MORPH_GRADIENT。其原型如下:dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)参数dst表示处理的结果,src表示原图像, cv2.MORPH_GRADIENT表示梯度运算,kernel表示卷积核。5*5的卷积核可以采用函数 np.ones((5,5), np.uint8) 构建。运行结果如下图所示:3.代码实现完整代码如下所示:#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test04.png', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((10,10), np.uint8) #图像闭运算 result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() 输出结果如下图所示,可以看到中间的噪声去掉。
-
应用RPA读防疫码后,写Excel,刚开始大概10分钟60个图片,但后面越来越卡,越来越少,有没有好的解决方式?图片 识别 这个控件 访问服务器 有无做限制了的?共计几百的图片后面直接不下去了
-
【摘要】 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法,基础性知识希望对您有所帮助。本文分享自华为云社区《[Python图像处理] 八.图像腐蚀与图像膨胀》,作者: eastmount 。本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法,基础性知识希望对您有所帮助。1.基础理论2.图像腐蚀代码实现3.图像膨胀代码实现一. 基础知识(注:该部分参考作者论文《一种改进的Sobel算子及区域择优的身份证智能识别方法》)图像的膨胀(Dilation)和腐蚀(Erosion)是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。其中膨胀类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大;腐蚀类似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。1.图像膨胀膨胀的运算符是“⊕”,其定义如下:该公式表示用B来对图像A进行膨胀处理,其中B是一个卷积模板或卷积核,其形状可以为正方形或圆形,通过模板B与图像A进行卷积计算,扫描图像中的每一个像素点,用模板元素与二值图像元素做“与”运算,如果都为0,那么目标像素点为0,否则为1。从而计算B覆盖区域的像素点最大值,并用该值替换参考点的像素值实现膨胀。下图是将左边的原始图像A膨胀处理为右边的效果图A⊕B。处理结果如下图所示:2.图像腐蚀腐蚀的运算符是“-”,其定义如下:该公式表示图像A用卷积模板B来进行腐蚀处理,通过模板B与图像A进行卷积计算,得出B覆盖区域的像素点最小值,并用这个最小值来替代参考点的像素值。如图所示,将左边的原始图像A腐蚀处理为右边的效果图A-B。处理结果如下图所示:二. 图像腐蚀代码实现1.基础理论形态学转换主要针对的是二值图像(0或1)。图像腐蚀类似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。其主要包括两个输入对象:(1)二值图像(2)卷积核卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,如下图所示:被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。换句话说,遍历到的黄色点位置,其周围全部是白色,保留白色,否则变为黑色,图像腐蚀变小。2.函数原型图像腐蚀主要使用的函数为erode,其原型如下:dst = cv2.erode(src, kernel, iterations)参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。注意:迭代次数默认是1,表示进行一次腐蚀,也可以根据需要进行多次迭代,进行多次腐蚀。3.代码实现完整代码如下所示:#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test01.jpg', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((5,5), np.uint8) #图像腐蚀处理 erosion = cv2.erode(src, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", erosion) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()输出结果如下图所示:由图可见,干扰的细线被进行了清洗,但仍然有些轮廓,此时可设置迭代次数进行腐蚀。erosion = cv2.erode(src, kernel,iterations=9)输出结果如下图所示:三. 图像膨胀代码实现1.基础理论图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了,主要用于去噪。(1) 图像被腐蚀后,去除了噪声,但是会压缩图像。(2) 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并且保持原有形状。它也包括两个输入对象:(1)二值图像或原始图像(2)卷积核卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,如下图所示:被扫描到的原始图像中的像素点,当卷积核对应的元素值只要有一个为1时,其值就为1,否则为0。2.函数原型图像膨胀主要使用的函数为dilate,其原型如下:dst = cv2.dilate(src, kernel, iterations)参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。注意:迭代次数默认是1,表示进行一次膨胀,也可以根据需要进行多次迭代,进行多次膨胀。通常进行1次膨胀即可。3.代码实现完整代码如下所示:#encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test02.png', cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((5,5), np.uint8) #图像膨胀处理 erosion = cv2.dilate(src, kernel) #显示图像 cv2.imshow("src", src) cv2.imshow("result", erosion) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()输出结果如下所示:图像去噪通常需要先腐蚀后膨胀,这又称为开运算,下篇文章将详细介绍。如下图所示:erosion = cv2.erode(src, kernel)result = cv2.dilate(erosion, kernel)
-
>摘要:本篇文章主要讲解Python调用OpenCV实现图像阈值化处理操作,包括二进制阈值化、反二进制阈值化、截断阈值化、反阈值化为0、阈值化为0。 本文分享自华为云社区《[[Python图像处理] 七.图像阈值化处理及算法对比](https://bbs.huaweicloud.com/blogs/293565?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=other&utm_content=content) 》,作者: eastmount 。 # 一. 阈值化 (注:该部分参考作者的论文《基于苗族服饰的图像锐化和边缘提取技术研究》) 图像的二值化或阈值化(Binarization)旨在提取图像中的目标物体,将背景以及噪声区分开来。通常会设定一个阈值T,通过T将图像的像素划分为两类:大于T的像素群和小于T的像素群。 灰度转换处理后的图像中,每个像素都只有一个灰度值,其大小表示明暗程度。二值化处理可以将图像中的像素划分为两类颜色,常用的二值化算法如公式1所示:  当灰度Gray小于阈值T时,其像素设置为0,表示黑色;当灰度Gray大于或等于阈值T时,其Y值为255,表示白色。 Python OpenCV中提供了阈值函数threshold()实现二值化处理,其公式及参数如下图所示: retval, dst = cv2.threshold(src, thresh, maxval, type)  常用的方法如下表所示,其中函数中的参数Gray表示灰度图,参数127表示对像素值进行分类的阈值,参数255表示像素值高于阈值时应该被赋予的新像素值,最后一个参数对应不同的阈值处理方法。  对应OpenCV提供的五张图如下所示,第一张为原图,后面依次为:二进制阈值化、反二进制阈值化、截断阈值化、反阈值化为0、阈值化为0。  二值化处理广泛应用于各行各业,比如生物学中的细胞图分割、交通领域的车牌设别等。在文化应用领域中,通过二值化处理将所需民族文物图像转换为黑白两色图,从而为后面的图像识别提供更好的支撑作用。下图表示图像经过各种二值化处理算法后的结果,其中“BINARY”是最常见的黑白两色处理。  # 二. 二进制阈值化 该方法先要选定一个特定的阈值量,比如127。新的阈值产生规则如下:  (1) 大于等于127的像素点的灰度值设定为最大值(如8位灰度值最大为255) (2) 灰度值小于127的像素点的灰度值设定为0 例如,163->255,86->0,102->0,201->255。 关键字为 cv2.THRESH_BINARY,完整代码如下: ``` #encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test.jpg') #灰度图像处理 GrayImage = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #二进制阈值化处理 r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY) print r #显示图像 cv2.imshow("src", src) cv2.imshow("result", b) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() ``` 输出为两个返回值,r为127,b为处理结果(大于127设置为255,小于设置为0)。如下图所示:  # 三. 反二进制阈值化 该方法与二进制阈值化方法相似,先要选定一个特定的灰度值作为阈值,比如127。新的阈值产生规则如下:  (1) 大于127的像素点的灰度值设定为0(以8位灰度图为例) (2) 小于该阈值的灰度值设定为255 例如,163->0,86->255,102->255,201->0。 关键字为 cv2.THRESH_BINARY_INV,完整代码如下: ``` #encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test.jpg') #灰度图像处理 GrayImage = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #反二进制阈值化处理 r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY_INV) print r #显示图像 cv2.imshow("src", src) cv2.imshow("result", b) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() ``` 输出结果如下图所示:  该方法得到的结果正好与二进制阈值化方法相反,亮色元素反而处理为黑色,暗色处理为白色。 # 四. 截断阈值化 该方法需要选定一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变,比如127。新的阈值产生规则如下:  (1) 大于等于127的像素点的灰度值设定为该阈值127 (2) 小于该阈值的灰度值不改变 例如,163->127,86->86,102->102,201->127。 关键字为 cv2.THRESH_TRUNC,完整代码如下: ``` #encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test.jpg') #灰度图像处理 GrayImage = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #截断阈值化处理 r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TRUNC) print r #显示图像 cv2.imshow("src", src) cv2.imshow("result", b) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() ``` 输出结果如下图所示:  该处理方法相当于把图像中比较亮(大于127,偏向于白色)的像素值处理为阈值。 # 五. 反阈值化为0 该方法先选定一个阈值,比如127,接着对图像的灰度值进行如下处理:  (1) 大于等于阈值127的像素点变为0 (2) 小于该阈值的像素点值保持不变 例如,163->0,86->86,102->102,201->0。 关键字为 cv2.THRESH_TOZERO_INV,完整代码如下: ``` #encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test.jpg') #灰度图像处理 GrayImage = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #反阈值化为0处理 r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO_INV) print r #显示图像 cv2.imshow("src", src) cv2.imshow("result", b) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() ``` 输出结果如下图所示:  # 六. 阈值化为0 该方法先选定一个阈值,比如127,接着对图像的灰度值进行如下处理:  (1) 大于等于阈值127的像素点,值保持不变 (2) 小于该阈值的像素点值设置为0 例如,163->163,86->0,102->0,201->201。 关键字为 cv2.THRESH_TOZERO,完整代码如下: ``` #encoding:utf-8 import cv2 import numpy as np #读取图片 src = cv2.imread('test.jpg') #灰度图像处理 GrayImage = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #阈值化为0处理 r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO) print r #显示图像 cv2.imshow("src", src) cv2.imshow("result", b) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() ``` 输出结果如下图所示:  该算法把比较亮的部分不变,比较暗的部分处理为0。 完整五个算法的对比代码如下所示: ``` #encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt #读取图像 img=cv2.imread('test.jpg') lenna_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #阈值化处理 ret,thresh1=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY) ret,thresh2=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV) ret,thresh3=cv2.threshold(GrayImage,127,255,cv2.THRESH_TRUNC) ret,thresh4=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO) ret,thresh5=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO_INV) #显示结果 titles = ['Gray Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV'] images = [GrayImage, thresh1, thresh2, thresh3, thresh4, thresh5] for i in xrange(6): plt.subplot(2,3,i+1),plt.imshow(images[i],'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show() ``` 输出结果如下图所示:  本文摘录自eastmount X华为云开发者社区联合出品的电子书《从零到一 • Python图像处理及识别》。
-
文章来源于当交通遇上机器学习 ,作者CY1.文章信息论文链接:https://www.mdpi.com/2071-1050/14/9/4930/htm2.摘要针对森林火灾图像中小目标、类火目标和类烟目标的检测,以及不同自然光下的火灾检测,提出了一种改进的Fire-YOLO深度学习算法。Fire-YOLO检测模型从三维扩展了特征提取网络,增强了火灾小目标识别的特征传播,提高了网络性能,减少了模型参数。进一步,通过特征金字塔的提升,得到了性能最好的预测框。与最先进的目标检测网络相比,Fire-YOLO取得了优异的结果,尤其是在火灾和烟雾的小目标检测方面。总体而言,Fire-YOLO检测模型可以有效地处理小火源目标、类火和类烟目标的检测。当输入图像尺寸为416 × 416分辨率时,平均检测时间为0.04 s /帧,可以提供实时的森林火灾检测。此外,文章提出的算法也可以应用于其他复杂情况下的小目标检测。3.简介火灾探测对于保护森林资源、保护人民生命财产至关重要。近年来,随着火灾图像探测成为研究热点,图像探测具有探测时间早、精度高、系统安装灵活、能有效探测大空间复杂建筑结构火灾等优点。一类方法基于火灾发生时的颜色识别,但基于颜色的方法对亮度和阴影非常敏感。因此,这些方法产生的假警报数量很高。随着机器学习的发展,深度学习技术已广泛应用于检测。有学者提出了一种使用微调卷积神经网络(CNN)的早期火灾探测框架,但该模型具有较高的计算成本。有的学者使用深度融合CNN进行烟雾探测,它结合了注意机制、特征级和决策级融合模块。然而,仍有一些小目标未能实现。有的学者使用了一种基于区域的快速卷积神经网络(R-CNN),根据空间特征检测可疑火灾区域(SRoF)和非火灾区域。这可以通过减少错误探测成功地提高火灾探测精度,但探测速度相对较慢。有的学者提出了一种基于YOLO-V3和YOLO-V4的森林烟雾检测算法。与YOLO-V4相比,YOLO-V3的模型更小,更易于部署。在此基础上,文章选择了YOLO-V3模型作为整体算法,并对其进行了改进。提出了对YOLO-V3算法的改进。网络中加入了空心卷积和DenseNet,提高了火灾早期小规模火焰的探测效果。然而,方法存在火焰定位不准确和屏蔽性能差的问题。I-YOLOv3-tiny模型通过网络结构优化、多尺度融合和K-均值聚类来提高检测精度,但检测速度有待提高。通过提高特征图的分辨率,它减少了火灾探测中的误差,但由于计算量的增加,相应的处理时间也增加了。将分类模型和目标检测模型结合用于火灾探测的方法降低了计算成本,提高了探测精度。尽管如此,它不适用于火灾早期小目标的探测场景。有的学者通过将原始网络结构中的两步降采样卷积网络替换为图像双分割和双线性上采样网络,扩大了小目标的特征,提高了小目标的检测精度。虽然这会增加参数的数量,但计算成本也会增加。对于具有实时性要求的火灾探测,仍需进一步改进。这些问题给火灾场景中小目标的检测带来了巨大的挑战。4.模型A. YOLO-V3YOLO- v3是由YOLO和YOLOV2网络演化而来的对象检测模型。与Faster R-CNN相比,YOLO- v3是单级检测算法,这意味着YOLO网络不需要Regional Proposal network (RPN),而是直接检测图像中的目标。这样既考虑了检测速度和检测精度,又减小了模型参数的尺寸。YOLO-V3对每个类别独立使用逻辑回归,取代了DarkENT-19到DarkENT-53的特征提取网络。YOLO-V3几乎与其他目标检测算法一样精确,但速度至少是后者的两倍。YOLO-V3的特征提取网络为Darknet-53。Darknet-53通过不断地使用卷积、标准化、池化等操作,提取输入到YOLO-V3网络的火灾图像的特征,并通过卷积不断地对火灾图像进行特征提取。这种方法广泛应用于其他各种网络模型中,ResNet也通过增加网络的深度来提高网络的精度。虽然可以同时缩放两个或三个维度,但由于深度和宽度之间有一定的关系,需要进行复杂的手动调整,也就是说只能调整深度和宽度才能达到更好的精度。目前,YOLO-V3模型在火灾探测中并未得到广泛应用。B.Fire-YOLOFire-YOLO是一种单阶段检测模型。FireYOLO用于火灾探测的步骤如下所示。首先,网络输入火灾图像分为S×S网格,和检测在每个探测单元格:是否有火焰或者烟雾的中心目标是发现落在S2的网格,网格负责检测目标被检测出来。然后,每个网格预测3个边界框,并给出这些边界框的置信度。置信计算的定义如下。当目标落在网格中时Pγ = 1,否则Pγ = 0。IoU表示预测边界框与真实边界框的重合。置信度反映了网格中是否存在对象以及包含对象时预测边界框的准确性。当多个包围盒同时检测到同一目标时,YOLO网络将使用非最大抑制(Non-Maximum Suppression, NMS)方法选择最佳包围盒。利用卷积神经网络对视频中的火情和烟雾进行分类来检测火情,具有良好的准确率。文章提出的Fire-YOLO模型从深度、宽度和分辨率三个维度考虑,实现了更加均衡的网络架构。Fire-YOLO火灾探测步骤如下图所示。将输入图像划分为S×S网格,每个网格预测三个边界框和置信度分数。然后,使用非最大值抑制方法选择最佳边界框。Effentnet的提出为设计一种标准化的卷积神经网络尺度方法提供了可能。通过平衡网络深度、宽度和分辨率这三个维度,可以在深度、宽度和分辨率这三个维度上实现更均衡的网络架构,而无需复杂的人工调整。由于火灾数据集中大量的检测对象为小火焰和烟雾,这种简单高效的复合尺度变换方法相对于其他的一维尺度变换方法可以进一步提高火灾的检测精度,并能充分节约计算资源。最终,文章使用的改进后的Effentnet比精度相同的卷积神经网络速度更快,参数更少,模型更小,具有明显的优势。提出的Fire-YOLO火灾探测模型网络结构如下图所示。与YOLO-V3中特征提取网络Darknet53中使用的残块不同,Fire-YOLO的特征提取网络使用了一个移动倒瓶颈卷积(MBConv),该卷积由深度卷积和挤压-激活网络(SENet)组成。MBConv块的结构,最重要的是,一个1×1卷积内核用于增加图像的维数,接下来通过切除卷积和SENet反过来,最后用1×1卷积内核来减少图像的维数输出。输入图像经过特征提取网络并上采样后,得到对应的特征图,即图像对应的向量特征矩阵。为了获得小目标的高层特征信息,特征图将经过卷积集处理,卷积集由5个卷积层组成,卷积核交替为1 × 1和3 × 3。然后利用池化层将高维向量扁平化为一维向量,由激活函数进行处理。将这些向量输入到激活函数中,得到相应的分类结果,并选择最有可能的结果作为特征提取网络输出。针对Darknet-53特征提取网络在深度、宽度和分辨率三个维度平衡方面的性能缺陷,文章在文章提出的fire数据集上使用改进的Effecentnet特征提取网络,弥补了Darknet-53在小目标检测方面的性能不足,提高了小目标检测的特征提取能力。对于输入的小目标图像,增强了小目标特征的学习能力,提高了小目标特征提取网络的性能。为了更好地处理小目标图像,Fire-YOLO模型首先将输入图像缩放到416 × 416像素,然后使用Effecentnet从图像中提取特征。经过多层的深度可分卷积、全局平均池化、特征压缩和特征扩展,对深度可分卷积学习到的特征映射进行上采样。通过特征金字塔处理得到不同尺度的预测框。文章提出的Fire-YOLO模型预测了13 × 13、26 × 26、52 × 52三种不同尺度的边界盒。用于小目标检测的深度可分离卷积结合了逐条通道卷积和逐级点卷积两种级别,提取不同粒度的小目标特征。深度可分卷积的结构如下图所示。通过比较YOLO-V3中使用的Darknet-53特征提取网络、快速R-CNN中使用的RPN目标建议网络和Fire YOLO中使用的深度可分离卷积,发现深度可分离卷积在计算复杂度方面具有优异的性能。这种卷积结构加快了模型的训练速度,提高了模型的检测精度。在火灾探测模型的实际应用中,可以加快网络的处理速度,如果计算量较小,可以达到实时图像处理的目的,从而实现火灾危险的实时探测。同时,该模型的硬件要求也降低了,以便于部署。SENet主要由两个阶段组成。第一个阶段是挤压阶段。第二个阶段是激发阶段。在获得挤压的矢量后,使用完全连接的层,并预测每个通道的重要性。随后,将其应用于与初始特征映射相对应的信道,以便小目标的特征信息将被赋予更高的优先级。SENet的结构如下图所示。在深度学习网络模型中,激活函数是一个连续可导的非线性函数,可以拟合非线性关系。激活函数及其导数的形式比较简单,可以加快网络的学习速度。正确使用激活函数对模型的训练和模型对目标预测的准确性都具有重要意义。活化函数的导数不宜过大或过小,最好稳定在1左右。文章提出的模型使用了Swish激活函数,其表达式为:其中β是常数或可训练参数。Swish具有无上界、无下界、光滑、非单调的特点。Swish在深度模式上比ReLU要好。乙状结肠的饱和函数很容易导致梯度的消失,借鉴ReLU的影响,当它是非常大的,它将方法,但当x→∞,函数的一般趋势比ReLU ReLU相似但更复杂。Swish函数可以看作是一个介于线性函数和ReLU函数之间的平滑函数。C. 性能指标文章利用训练后的Fire-YOLO模型对测试图像进行一系列实验,验证算法的性能。评价神经网络模型有效性的相关指标有:precision, recall, F1, AP值。在二元分类问题中,根据真类别和预测类别的组合,样本可分为四种类型:真阳性(TP)、假阳性(FP)、真阴性(TN)和假阴性(FN)。分类结果的混淆矩阵如下表所示。其余指标的公式根据混淆矩阵计算如下:5.实验分析本节介绍训练网络的实验环境、数据集、模型效果评价指标以及实验结果分析。通过一系列不同模型的对比实验,分析了文章提出的新模型的优越性。实验过程中使用了火数据集和小目标数据集。通过fire数据集对目标检测网络的准确性进行了验证和评估,在不同光照条件、类火烟雾目标等复杂环境下具有良好的检测效果;在小目标火力数据集上验证了该检测方法。结果证实,Fire-YOLO更容易检测到较小的目标。Fire-YOLO检测模型接收416 × 416像素图像作为输入,由于GPU性能限制,批处理大小设为8,每个模型训练100 epoch,初始学习速率为10−3,50 epoch后除以10。A. 数据采集实验中使用的数据集是通过采集消防公益平台上的消防图片来构建的。将fire数据集和小目标数据集分别划分为训练集、验证集和测试集,以便在相同的实验设置下对不同的模型进行训练。第一个数据集为火焰数据集,文章使用的图像数据是公共网站上收集的火灾和烟雾图像。这19819张原始图像包括不同天气和光线线下的火焰和烟雾。在对以上数据集图像进行编号后,使用LabelImg工具进行手动标记,包括绘制边框和分类类别。考虑到标签与数据的对应关系,为保证数据集分布均匀,将数据集按70%、20%、10%的比例随机分为训练集、验证集和测试集。为了保证实验环境相同,最终数据集以PASCAL VOC数据集格式存储。为了防止神经网络中过拟合,对于像素区域不清晰的阳性样本不进行标记。完成的数据集如下表所示。第二个数据集为小目标检测数据集,文章自制了370张图像的数据集。数据集的内容都是包含小目标的火焰和烟雾。通过将250 × 250像素的火焰图像嵌入到1850 × 1850像素的图像中,可以使被探测目标在图像中的面积非常小。最后使用LabelImg工具手工标注小目标。B. 算法的比较分析为了验证模型的性能,文章使用火焰和烟雾图像作为训练集。将所提出的模型与YOLO-V3和Faster R-CNN检测方法进行了比较。三种模型在试验过程中的P-R曲线如图5所示。准确率、召回率、F1评分和mAP值如下表所示。基于以上结果,文章提出的Fire-YOLO在检测性能上优于YOLO-V3和Faster R-CNN。Fire-YOLO模型的精度为0.915,F1的值为0.73,mAP的值为0.802,高于其他两个模型,体现了该模型的优越性。同时Fire-YOLO降低了计算成本,节约了资源,更有利于社会的可持续发展。C. 小目标的检测性能在火灾探测过程中,由于摄像机离火源太远,实际的火源位置在捕获的图像中只占很小的区域,这将导致网络模型对火焰和烟雾的探测非常差。通过比较三种不同的目标检测模型在小目标火灾数据集上的准确率、召回率和mAP,可以得出文章提出的Fire-YOLO模型对非常小的目标对象的检测效率优于Faster R-CNN和未改进的YOLO-V3网络。训练于射击小目标数据集的Fire-YOLO对待检测小目标图像在深度、宽度和分辨率三个维度上进行自适应调整,增强了信息之间的交互作用。从而增强了Fire-YOLO提取小目标特征的能力,提高了小目标物体的检测精度。下表给出了三种模型方法对小目标射击数据集评价指标的具体结果。三种不同模型对小目标火力数据集的检测效率差异较大。文章提出的Fire-YOLO模型的准确率和召回率比其他模型更显著。准确率可达75.48%,可实现对小目标的检测。森林火灾的早期及时发现可以大大减少对生态环境的破坏,减少火灾造成的经济损失,促进生态环境的可持续发展。训练后Fire-YOLO网络模型具有良好的火力目标探测效率。文章使用Fire-YOLO模型来检测非常小的火力目标,并将检测结果图形化显示。较小的射击目标是小目标射击数据集中验证数据集中的所有图像。对Fire-YOLO进行了30多个验证插图的验证,最终的图像检测结果如下图所示。Fire-YOLO可以检测到图片中所有的火和烟,而YOLO-V3和Faster R-CNN在检测结果中只能检测到图像中的部分目标。D. 类火和类烟目标的探测性能通过对比模型对丰富的类火和类烟图像的检测性能,可以发现Fire-YOLO对类火和类烟目标具有更好的检测效率。除了Fire-YOLO,其他模型分别将图像中的光和云误判为火和烟。显然,Fire-YOLO对图像纹理特征更加敏感,这是由于在特征提取网络中结合了1 × 1卷积核和SE模块。最后,提高了该模型在探测混淆目标时的鲁棒性。三种模型的类火和类烟检测结果如下图所示。在上述情况下,Fire-YOLO模型大大减少了误检的发生,减少了劳动力消耗,节约了社会资源。E. 模型在不同自然光下的检测性能本节通过对比不同自然光照条件下的多幅火灾图像,测试Fire-YOLO在真实环境中的性能。在实际火灾探测现场,会出现光线不足或光线很强的情况。在这种场景下,会对火灾探测产生一定的影响。使用大尺度feature map对模型进行改进,识别小目标对象,但在弱光条件下存在误判。检测结果如下图所示。通过比较FasterR-CNN、YOLO-V3和Fire-YOLO模型的检测性能,结果表明该模型在不同光照条件下具有良好的性能,对光照变化具有较强的鲁棒性。Fire-YOLO模式的这些优势可以减少火灾对森林的危害,减少温室效应对人类的影响,促进可持续发展文章提出的Fire- YOLO模型在小目标、类火、类烟探测以及不同明度下的火灾探测等方面都取得了令人满意的效果。在实际应用中,该方法不仅具有实时性,而且具有良好的鲁棒性。然而文章检测算法仍然存在检测精度低、检测半遮挡目标具有挑战性的问题。这可能是由于在实际环境中探测火焰时,火灾的可变性和火灾蔓延的复杂性,造成了火灾检查的困境,如下图所示。.
-
【功能模块】ModelArts产品AI应用服务ID 7bb213cc-d27c-4f25-88db-d15b7a79fd66【操作步骤&问题现象】1、原yolov5 提供了模型集成,但在obs中上传两个模型文件(.pt)后推理错误。模型(pt)的读入是不公开的,无法修改推理文件完成Ensemble Inference。2、官方要求的文件路径如下OBS桶/目录名 |── resnet | ├── model 必选: 固定子目录名称,用于放置模型相关文件 | │ ├── <<自定义Python包>> 可选:用户自有的Python包,在模型推理代码中可以直接引用 | │ ├── resnet50.pth 必选,pytorch模型保存文件,保存为“state_dict”,存有权重变量等信息。 | │ ├──config.json 必选:模型配置文件,文件名称固定为config.json, 只允许放置一个 | │ ├──customize_service.py 必选:模型推理代码,文件名称固定为customize_service.py, 只允许放置一个,customize_service.py依赖的文件可以直接放model目录下3、我的OBS【日志信息】(可选,上传日志内容或者附件)
-
华为云云享.书库》系列电子书来啦!本系列电子书旨在帮助开发者成长,汇聚华为云内外部专家技术精华制作而成。 本书《从零到一•Python图像处理》是该系列电子书第3部。本书作者杨秀璋,贵州财经大学教师,武汉大学在读博士。长期从事Web数据挖掘、知识图谱、人工智能、网络安全等方向研究,现已出版专著6部,发表论文30余篇,主持课题6项(含1项贵州省优秀自然科学基金),并参与多项国家级课题。近十年在华为云等社区分享原创博客600余篇,开源项目100余个,全网累计阅读量超过1000万人次,粉丝20余万。此书是作者十多年图像处理及识别编程经验的结晶,包含丰富真实的案例及详细的算法原理,采用Python3、OpenCV和Keras等库实现,通过图文结合、代码注释、实例详解的形式娓娓道来。希望这本电子书及开源的代码能帮助读者迅速入门,并让图像处理及识别领域的知识轮廓逐渐清晰。全书包括三部分内容,共48章。第一部分是图像处理基础知识(共10章),详细介绍了图像处理基础、OpenCV入门、几何图形绘制、算数与逻辑运算、几何变换、量化和采样处理等内容。第二部分是图像运算和图像增强(共17章),包括图像点运算、灰度变换、形态学处理、直方图绘制、图像均衡化、平滑锐化等内容。第三部分是图像识别及图像高阶案例(共21章),包括图像分割、傅里叶变换、霍夫变换、图像分类、特效处理、OpenGL、图像去雾等知识,也囊括了经典的文字识别、车牌识别、人脸识别、目标检测、基于深度学习的图像分类、小麦检测、GAN图像生成等案例。本书详细讲解了Python图像处理及识别知识,是市面上为数不多结合实战的图像处理书籍,更是一本计算机视觉的宝典。全书内容通俗易懂,案例丰富,图文并茂,便于读者快速上手,非常适合初学者、技术人员和高校师生学习。同时,作者杨秀璋长期从事相关研究,实践经验丰富,并且乐于分享知识。无论是新手还是经验丰富的技术人员,都希望您能从中获益。扫描下方二维码,回复“云享书库”,快来免费领取这本电子书吧~附:云享书库第2期:年度重磅!华为云2021应用构建技术实践精选集,七大领域400页+云上开发宝典,免费下载!云享书库第1期:【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!
-
【赛事资讯】2022年3月26日-- 4月1日✨【品牌赛事】提交倒计时|2022软挑作品提交通道已开启摘要:第八届华为软件精英挑战赛报名截止到3月24日18:00已结束,3月25日9:00作品提交通道已开启。✨【书籍分享】华为云专家10年技术沉淀,684页《从零到一•Python图像处理》独家免费下载摘要:本书作者杨秀璋,贵州财经大学教师,武汉大学在读博士。长期从事Web数据挖掘、知识图谱、人工智能、网络安全等方向研究,现已出版专著6部,发表论文30余篇,主持课题6项(含1项贵州省优秀自然科学基金),并参与多项国家级课题。近十年在华为云等社区分享原创博客600余篇,开源项目100余个,全网累计阅读量超过1000万人次,粉丝20余万。✨【直播预告】华为云大咖带你玩转云原生DevSecOps摘要:本直播为华为云云原生入门级开发者认证人才计划活动第8场直播,本直播将由华为云高级讲师路老师给大家分享敏捷软件开发和DevOps的概念及其关系、持续集成、持续交付、持续部署的概念、华为云HE2E DevOps框架,带你玩转云原生DevSecOps!✨【资产园地】102种常见的昆虫识别模型|识别昆虫, 提高农产品产量, 稳定市场价格摘要:昆虫害虫是影响农产品产量的主要因素之一。 准确识别虫害有助于及时采取预防措施,避免经济损失。这个模型可以预测102种常见的昆虫,包含rice leaf roller,rice leaf caterpillar, paddy stem maggot, asiatic rice borer, yellow rice borer等。输入一个图像,这个模型会预测该图像中昆虫分别属于每个类别的置信度,置信度的取值范围为0到1。✨【技术干货】手把手教您体验ModelArts Notebook摘要:ModelArts 是面向开发者的一站式 AI 平台,为机器学习与深度学习提供海量数据预处理及交互式智能标注、大规模分布式训练、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。往期回顾:【赛事资讯】2022年3月25日精彩速递-提交倒计时|2022软挑作品提交通道已开启【赛事资讯】2022年3月18日精彩速递-第八届华为软件精英挑战赛火热报名中,超全FAQ来袭!【赛事资讯】2022年3月11日精彩速递-2022华为大学生无线基站Massive MIMO创新大赛正式开启,快来报名参赛吧!【赛事资讯】2022年3月4日精彩速递-官宣!2022年第八届华为软件精英挑战赛正式启动报名
-
《华为云云享.书库》系列电子书来啦!本系列电子书旨在帮助开发者成长,汇聚华为云内外部专家技术精华制作而成。 本书《从零到一•Python图像处理》是该系列电子书第3部。本书作者杨秀璋,贵州财经大学教师,武汉大学在读博士。长期从事Web数据挖掘、知识图谱、人工智能、网络安全等方向研究,现已出版专著6部,发表论文30余篇,主持课题6项(含1项贵州省优秀自然科学基金),并参与多项国家级课题。近十年在华为云等社区分享原创博客600余篇,开源项目100余个,全网累计阅读量超过1000万人次,粉丝20余万。此书是作者十多年图像处理及识别编程经验的结晶,包含丰富真实的案例及详细的算法原理,采用Python3、OpenCV和Keras等库实现,通过图文结合、代码注释、实例详解的形式娓娓道来。希望这本电子书及开源的代码能帮助读者迅速入门,并让图像处理及识别领域的知识轮廓逐渐清晰。全书包括三部分内容,共48章。第一部分是图像处理基础知识(共10章),详细介绍了图像处理基础、OpenCV入门、几何图形绘制、算数与逻辑运算、几何变换、量化和采样处理等内容。第二部分是图像运算和图像增强(共17章),包括图像点运算、灰度变换、形态学处理、直方图绘制、图像均衡化、平滑锐化等内容。第三部分是图像识别及图像高阶案例(共21章),包括图像分割、傅里叶变换、霍夫变换、图像分类、特效处理、OpenGL、图像去雾等知识,也囊括了经典的文字识别、车牌识别、人脸识别、目标检测、基于深度学习的图像分类、小麦检测、GAN图像生成等案例。本书详细讲解了Python图像处理及识别知识,是市面上为数不多结合实战的图像处理书籍,更是一本计算机视觉的宝典。全书内容通俗易懂,案例丰富,图文并茂,便于读者快速上手,非常适合初学者、技术人员和高校师生学习。同时,作者杨秀璋长期从事相关研究,实践经验丰富,并且乐于分享知识。无论是新手还是经验丰富的技术人员,都希望您能从中获益。扫描下方二维码,回复“云享书库”,快来免费领取这本电子书吧~转载自华为云社区云享.书库活动
-
图像识别入门必读,华为云专家10年技术沉淀,684页《从零到一•Python图像处理》独家免费下载 | 云享·书库No.3 技术火炬手 发表于 2022/03/14 18:49:41 1.5w+ 5 3【摘要】 《华为云云享.书库》系列第3部电子书上线啦!《华为云云享.书库》系列电子书来啦!本系列电子书旨在帮助开发者成长,汇聚华为云内外部专家技术精华制作而成。 本书《从零到一•Python图像处理》是该系列电子书第3部。本书作者杨秀璋,贵州财经大学教师,武汉大学在读博士。长期从事Web数据挖掘、知识图谱、人工智能、网络安全等方向研究,现已出版专著6部,发表论文30余篇,主持课题6项(含1项贵州省优秀自然科学基金),并参与多项国家级课题。近十年在华为云等社区分享原创博客600余篇,开源项目100余个,全网累计阅读量超过1000万人次,粉丝20余万。此书是作者十多年图像处理及识别编程经验的结晶,包含丰富真实的案例及详细的算法原理,采用Python3、OpenCV和Keras等库实现,通过图文结合、代码注释、实例详解的形式娓娓道来。希望这本电子书及开源的代码能帮助读者迅速入门,并让图像处理及识别领域的知识轮廓逐渐清晰。全书包括三部分内容,共48章。第一部分是图像处理基础知识(共10章),详细介绍了图像处理基础、OpenCV入门、几何图形绘制、算数与逻辑运算、几何变换、量化和采样处理等内容。第二部分是图像运算和图像增强(共17章),包括图像点运算、灰度变换、形态学处理、直方图绘制、图像均衡化、平滑锐化等内容。第三部分是图像识别及图像高阶案例(共21章),包括图像分割、傅里叶变换、霍夫变换、图像分类、特效处理、OpenGL、图像去雾等知识,也囊括了经典的文字识别、车牌识别、人脸识别、目标检测、基于深度学习的图像分类、小麦检测、GAN图像生成等案例。本书详细讲解了Python图像处理及识别知识,是市面上为数不多结合实战的图像处理书籍,更是一本计算机视觉的宝典。全书内容通俗易懂,案例丰富,图文并茂,便于读者快速上手,非常适合初学者、技术人员和高校师生学习。同时,作者杨秀璋长期从事相关研究,实践经验丰富,并且乐于分享知识。无论是新手还是经验丰富的技术人员,都希望您能从中获益。扫描下方二维码,回复“云享书库”,快来免费领取这本电子书吧~附:云享书库第2期:年度重磅!华为云2021应用构建技术实践精选集,七大领域400页+云上开发宝典,免费下载!云享书库第1期:【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!
上滑加载中
推荐直播
-
用码道,让你的AI作品三步上朋友圈2026/08/04 周二 19:00-20:00
林华鼎-华为云AI开发者运营负责人
从入门 · 到做AI应用 · 到企业级开发。不教编程,只教用AI · 零代码、有产出、能带走、可炫耀 · 每课人人动手实操
回顾中 -
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
基于华为云码道,构建你的定制化AI搭子2026/08/14 周五 09:00-11:30
明亮-华为云开发者发展与支持部部长
本期直播将向您全面介绍华为云码道产品,并基于码道手把手教你部署自己的定制化AI陪伴搭子。
回顾中
热门标签