【图像处理】去雾源码收集(halcon、python、C#、VB、matlab)

这篇具有很好参考价值的文章主要介绍了【图像处理】去雾源码收集(halcon、python、C#、VB、matlab)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着图像处理技术和计算机视觉技术的蓬勃发展,对特殊天气下的场景检测和图像处理成为重要的研究方向。在雾天拍摄的图像容易受雾或霾的影响,导致图片模糊、对比度低以至于丢失图像重要信息。因此,需要对带雾图像进行去雾,处理图像信息,保证其他计算机视觉任务的正常运行。

一、halcon算法

1.1 halcon算法源码

本算法用到的图像见资源链接,已上传至资源文件

**********************************
*何凯明博士去雾算法代码实现
*论文:<<Single Image Haze Removal Using Dark Channel Prior>>
*编写时间:2016-04-11
*作者:datiansong
**********************************
dev_update_off ()
dev_close_window ()
read_image (Image, 'fish')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
disp_message (WindowHandle, '原图像', 'window', 12, 12, 'red', 'false')
*转换图像类型,用于后续运算
convert_image_type (Image, IxImage, 'real')
*求取暗通道图像
decompose3 (IxImage, R, G, B)
min_image (R, G, ImageMin)
min_image (ImageMin, B, ImageMin1)
gray_erosion_rect (ImageMin1, DarkChannelImage,5, 5)
*计算全球大气光成分A的值
min_max_gray (DarkChannelImage, DarkChannelImage, 0.1, Min, Max, Range)
threshold (DarkChannelImage, Region, Max, 255)
min_max_gray (Region, IxImage, 0, Min1, A, Range1)
*计算透视率预估值tx
scale_image (IxImage, ImageScaled, 1/A, 0)
decompose3 (ImageScaled, R1, G1, B1)
min_image (R1, G1, ImageMin2)
min_image (ImageMin2, B1, ImageMin3)
*==================================================特别注意,下面的参数需要进行适当的,本人提供的图和参数直接用即可
*下面的尺寸如果是原来的15,那么楼房的边会出现涂抹的效果,很难看
gray_erosion_rect (ImageMin3, ImageMin4, 3, 3)
*下面的小数,绝对值越大,颜色越深,在这张图上,为-0.6效果相对较好,何博士的原来为-0.95很黑
scale_image (ImageMin4, txImage, -0.7, 1)
*设定阈值T0,如果t<T0,则t=T0
T0:=0.1
threshold (txImage, Region1, 0, T0)
paint_region (Region1, txImage, txImage, T0, 'fill')
*求取去雾后的图像
scale_image (IxImage, ImageScaled1, 1, -A)
decompose3 (ImageScaled1, R2, G2, B2)
div_image (R2, txImage, ImageResultR, 1, A)
div_image (G2, txImage, ImageResultG, 1, A)
div_image (B2, txImage, ImageResultB, 1, A)
compose3 (ImageResultR, ImageResultG, ImageResultB, JxImage)
dev_display (Image)
dev_open_window (0, 0+Width, Width, Height, 'black', WindowHandle1)
dev_display (JxImage)
disp_message (WindowHandle1, '去雾图', 'window', 12, 12, 'green', 'false')

1.2 halcon算法效果图

图像去雾代码,opencv-python,matlab,图像处理,python,去雾算法,源码

二、opencv算法

2.1 python源码

python的算法很简单,实际上仅调用了opencv的算法,一共4行主要代码就实现了功能,但是这个算法相对于其他的算法而言,可调的参数几乎没有。

import numpy as np
import cv2

if __name__ == '__main__':
    img = cv2.imread('fog1.png')

    # 实现去雾代码
    b, g, r = cv2.split(img)
    bx, gx, rx = cv2.equalizeHist(b), cv2.equalizeHist(g), cv2.equalizeHist(r)
    img_enhance = cv2.merge((bx, gx, rx))

    images = np.concatenate((img, img_enhance), axis=1)
    cv2.imwrite('fog1_enhance.jpeg', images)
    cv2.imshow('result', images)
    cv2.waitKey()
    cv2.destroyAllWindows()

2.2opencv算法效果图

图像去雾代码,opencv-python,matlab,图像处理,python,去雾算法,源码
图像去雾代码,opencv-python,matlab,图像处理,python,去雾算法,源码

三、C#算法

图像去雾代码,opencv-python,matlab,图像处理,python,去雾算法,源码

3.1 C#源码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace HazeRemovalTest
{
    public unsafe partial class FrmTest : Form
    {
        // dll的代码中用的是StdCall,这里也要用StdCall,如果用Cdecl,则会出现对 PInvoke 函数“....”的调用导致堆栈不对称错误,再次按F5又可以运行
       
        [DllImport("HazeRemoval.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true)]
        private static extern void HazeRemovalUseDarkChannelPrior(byte* Src, byte* Dest, int Width, int Height, int Stride, int Radius,int GuideRadius, int MaxAtom, float Omega, float Epsilon, float T0);

        private bool Busy = false;

        public FrmTest()
        {
            InitializeComponent();
        }
     

        private void CmdOpen_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.RestoreDirectory = true;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                PicSrc.Image.Dispose();
                PicDest.Image.Dispose();
                PicSrc.Image = Bitmap.FromFile(openFileDialog.FileName);
                PicDest.Image = Bitmap.FromFile(openFileDialog.FileName);
                Application.DoEvents();
                ShowHazeRemovalResult();
            }
        }

        private void CmdHazeRemoval_Click(object sender, EventArgs e)
        {
            ShowHazeRemovalResult();
        }

        private void ShowHazeRemovalResult()
        {
            Busy = true;
            Bitmap SrcB = (Bitmap)PicSrc.Image;
            Bitmap DstB = (Bitmap)PicDest.Image;
            BitmapData SrcBmpData = SrcB.LockBits(new Rectangle(0, 0, SrcB.Width, SrcB.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            BitmapData DstBmpData = DstB.LockBits(new Rectangle(0, 0, DstB.Width, DstB.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            Stopwatch Sw = new Stopwatch();
            Sw.Start();
            HazeRemovalUseDarkChannelPrior((byte*)SrcBmpData.Scan0, (byte*)DstBmpData.Scan0, SrcBmpData.Width, SrcBmpData.Height, SrcBmpData.Stride, BlockSize.Value, GuideBlockSize.Value, MaxAtom.Value, Omega.Value * 0.01f, Epsilon.Value * 0.001f, T0.Value * 0.01f);
            Sw.Stop();
            this.Text = Sw.ElapsedMilliseconds.ToString();

            SrcB.UnlockBits(SrcBmpData);
            DstB.UnlockBits(DstBmpData);
            PicDest.Invalidate();
            Busy = false;
        }

        private void FrmTest_Load(object sender, EventArgs e)
        {
            ShowHazeRemovalResult();
        }

        private void BlockSize_Scroll(object sender, ScrollEventArgs e)
        {
            LblBlockSize.Text = BlockSize.Value.ToString();
            if (Busy==false) ShowHazeRemovalResult();
        }

        private void GuideBlockSize_Scroll(object sender, ScrollEventArgs e)
        {
            LblGuideBlockSize.Text = GuideBlockSize.Value.ToString();
            if (Busy == false) ShowHazeRemovalResult();
        }

        private void Omega_Scroll(object sender, ScrollEventArgs e)
        {
            LblOmega.Text = Omega.Value.ToString() + "%";
            if (Busy == false) ShowHazeRemovalResult();
        }

        private void MaxAtom_Scroll(object sender, ScrollEventArgs e)
        {
            LbLAtom.Text = MaxAtom.Value.ToString();
            if (Busy == false) ShowHazeRemovalResult();
        }

        private void Epsilon_Scroll(object sender, ScrollEventArgs e)
        {
            LblEpsilon.Text = (Epsilon.Value * 0.0001).ToString();
            if (Busy == false) ShowHazeRemovalResult();
        }

        private void T0_Scroll(object sender, ScrollEventArgs e)
        {
            LblT0.Text = (T0.Value * 0.01).ToString();
            if (Busy == false) ShowHazeRemovalResult();
        }

  
    }
}

下载地址

http://files.cnblogs.com/Imageshop/HazeRemovalTest.rar

四、VB源码

4.1 截图

下载地址

http://files.cnblogs.com/Imageshop/%E5%9B%BE%E5%83%8F%E5%8E%BB%E9%9B%BE%E7%BB%BC%E5%90%88%E7%89%88%E6%9C%AC.rar

五、matlab源码

下载地址

https://link.csdn.net/?target=http%3A%2F%2Ffiles.cnblogs.com%2FImageshop%2Fcvpr09defog%2528matlab%2529.rar

说明:本文所需图片以及python源码已放置本人的资源中,自行下载

https://download.csdn.net/download/sunnyrainflower/87952490?spm=1001.2014.3001.5503

六、总结

关于去雾的算法,本人更喜欢C#的代码,可调参数多,且容易实现,python的程序几乎没有可调参数;halcon的算法还需要精调参数,和图像的尺寸和清晰度比较相关;功能最多的是vb的代码,源码的作者集成了6种算法在里面,都可以尝试一下。matlab的就不做过多的说明了,自己慢慢研究吧。

更多的除雾算法及论文说明
参考链接
https://blog.csdn.net/huixingshao/article/details/42834939
https://zhuanlan.zhihu.com/p/489222309文章来源地址https://www.toymoban.com/news/detail-518596.html

到了这里,关于【图像处理】去雾源码收集(halcon、python、C#、VB、matlab)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

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

    2024年01月23日
    浏览(69)
  • Python图像处理【23】分布式图像处理

    Python 已逐渐成为数据分析/处理领域中的主要语言,这得益于 Python 丰富的第三方库,但是,这些库的设计并未在分布式上进行扩展。 Dask 是为了原生地扩展这些 Python 库及其生态系统而开发的,它能够与现有的 Python 生态系统兼容,将其扩展到多核计算机和分布式集群中。

    2024年03月23日
    浏览(51)
  • Python案例分析|使用Python图像处理库Pillow处理图像文件

    本案例通过使用Python图像处理库Pillow,帮助大家进一步了解Python的基本概念:模块、对象、方法和函数的使用 使用Python语言解决实际问题时,往往需要使用由第三方开发的开源Python软件库。 本案例使用图像处理库Pillow中的模块、对象来处理图像:实现读取图像、获取图像信

    2024年02月16日
    浏览(49)
  • Python 使用多种方法对图像进行锐化处理——图像处理

    fun_01() fun_02() fun_03()      

    2024年02月13日
    浏览(84)
  • python数字图像处理基础(四)——图像平滑处理、形态学操作、图像梯度

    让有噪音点(图像上显得突兀的像素点)的图像变得更加自然顺眼 1.均值滤波 blur() 根据核的大小(rowcol),每个像素值就等于以此像素为中心的周围rowcol个像素的平均值。 核大一点,显然越平滑、模糊。 result = cv2.blur(img, (15, 15)) 2.方框滤波 boxFilter() normalize=true的时候,效果同

    2024年01月18日
    浏览(82)
  • 《数字图像处理-OpenCV/Python》连载:形态学图像处理

    本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 形态学图像处理是基于形状的图像处理,基本思想是利用各种形状的结构元进行形态学运算,从图像中提取表达和描绘区域形状的结构信息。形态学运算的数学原

    2024年02月19日
    浏览(81)
  • 【图像处理】使用 Python 进行图像增强

            图像增强技术的深度和复杂性往往在一系列捕获和共享中被忽视。从傅里叶变换到白平衡和直方图处理,各种方法都可以将普通照片转换为引人注目的图像。这篇博文旨在解开这些技术。         我在节日期间拍了一张照片,在夜间庆祝活动中。遗憾的是,图

    2024年02月16日
    浏览(76)
  • python图像处理实战(一)—图像基础

    🚀写在前面🚀 🖊个人主页:https://blog.csdn.net/m0_52051577?type=blog  🎁欢迎各位大佬支持点赞收藏,三连必回!! 🔈本人新开系列专栏—python图像处理 ❀愿每一个骤雨初晴之时,所有的蜻蜓振翅和雨后惊雷,都归你。 目录 一、前言 二、认识图像  三、用到的库  (1)Numpy

    2024年02月09日
    浏览(46)
  • 基于MATLAB实现图像处理常用应用案例(附上100个仿真源码+数据)

    MATLAB是一款功能强大的图像处理软件,可以用于实现各种常见的图像处理应用。下面将介绍几个常见的图像处理应用案例。 图像去噪是图像处理中的一项重要任务,可以提高图像质量和视觉效果。MATLAB提供了多种图像去噪算法,如中值滤波、高斯滤波、小波去噪等。以中值滤

    2024年02月14日
    浏览(48)
  • python --opencv图像处理(图像腐蚀与图像膨胀)

    图像的腐蚀( Erosion )和膨胀( Dilation )是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。 又出来新名词了:形态学。 图像处理中指的形态学,往往表示的是数学形态学。数学形态学( Mathematical morphology ) 是一门建立在格论和拓扑学基础之上的图像

    2024年02月08日
    浏览(66)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包