2019-08-12 11:49:45 canfune 阅读数 100
  • 深度学习--实现图片分析及目标定位视频教学

    基于深度学习实现图片分析及目标定位视频教程,通过计算机视觉和大数据、深度学习的结合,将积累的医学数据转化为可用的模型,利用图像处理和机器学习算法对图像进行分析,检测异常部分,利用AI技术克服不同操作人员之间的主观性差异,减轻人工处理的工作量,让计算机在精确度和速度上帮助医生提高诊断效率。

    1208 人正在学习 去看看 CSDN讲师

图像预处理

图像灰度化

为什么:
一般我们得到的图片是真彩色图片,每个像素有B,G,R三种色彩信息,一共占3个字节,当B=G=R时,图像只显示灰度颜色,仅包含亮度信息,不包含色彩信息,由原来的24位位图变成256级的灰度图像,便于存储,也提高处理效率。
方法:
-cv.cvtColor(img,cv.COLOR_BGR2GRAY)->gray

图像二值化

为什么:
灰度图像的像素级为256级,而二值图像的像素级为2级(只有0/255),后者能明显提高处理效率,其次,在一些场合中,为了得到感兴趣的区域,将图像的前景和背景分离,可以二值化将其看成是聚类或者是分类
方法:

  • OSTU(最大类间分类法)当阈值t为全局最佳阈值的时候,前景与背景之间的对比度最强
  • 自适应阈值化:考虑局部的阈值化,取领域的平均(_MEAN_C)或者高斯加权和(_GAUSSIAN_Ccv.adaptiveThreshold(),大图片若需要二值化一般剪切成小图片,然后进行自适应阈值化,达到最好的二值化效果图像变换

图像变换

平移翻转(不插值)缩放旋转剪切(插值)傅里叶变换(变换到频域—>有利于后续的滤波操作)

图像复原

图像的平滑(突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变 ,减小突变梯度)
方法:

  • 归一化块(均值)滤波器 (Normalized Box Filter)(最简单的滤波器)

  • 高斯滤波器 (Gaussian Filter)(最有用的滤波器)输入数组的每一个像素点与 高斯内核卷积将卷积和当作输出像素值。GaussianBlur(src, dst, ksize, sigmaX, sigmaY=0, borderType=BORDER_DEFAULT )输入,输出,高斯内核大小,x偏差,y。偏差高斯平滑滤波器对去除服从正态分布的噪声是很有效的

  • 中值滤波:像素点领域的中值代替该像素值,它可以去除脉冲噪声、椒盐噪声同时保留图像边缘细节。
    均值滤波和高斯滤波运算主要问题是有可能模糊图像中尖锐不连续的部分。而中值滤波主要是用来解决这些问题的cv.medianBlur(image, 5)5代表卷积核的大小为5x5

  • 边缘保留滤波:边缘保持滤波器是在综合考虑了均值滤波器(平滑图像外还可能导致图像边缘模糊)和中值滤波器(去除脉冲噪声的同时可能将图像中的线条细节滤除。)的优缺点后发展起来的,它的特点是:滤波器在除噪声脉冲的同时,又不至于使图像边缘十分模糊

  • 双边滤波器:双边滤波的核函数是空间域核与像素范围域核的综合结果**bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)**同时考虑空间与信息和灰度相似性,达到保边去噪的目的

图像增强

空间域法

  • 直方图均衡化(对于背景和前景都太亮或者太暗的图像非常有用),对图像中每个像素值的概率进行统计,按照概率分布函数对图像的像素进行重新分配来达到图像拉伸的作用,将图像像素值均匀分布在最小和最大像素级之间。使得图像对比度增强,图像更加清晰
    hist = cv2.calcHist([gray], [0], None, [256], [0.0, 255.0])
    images:图像\channels:通道\mask:图像掩码,可以填写None\hisSize:灰度数目
    ranges:分布区间
  • 滤波:均值滤波、中值滤波、高斯滤波(图像平滑和去噪)

频域法

  • 傅里叶变换只有频域信息,傅里叶变换值,当对应的复平面的旋转频率和原图像的正弦波/余弦波频率相同时(所有的曲线都是由不同的频率和周期的正弦波叠加而成的),质心会达到一个极大值,这样就可以分离(通过加低通频率或者高通频率,来消去某一个频率对曲线的影响)出曲线所包含的频率了
  • 小波变换小波变换通过选取合适的滤波器,可以极大的减小或去除所提取得不同特征之间的相关性.(小波变换同时具有时域和频域的信息.有两个重要的参数信息,scaling,当尺度变大时,对应的频率变小,可以捕捉低频的信息,即平滑的信息,反之,尺度变小,频率变大,捕捉高频信息,即边缘突变的信息,shifting,位移可以控制小波信号出现的位置,可以用来对其我们要在信号中捕捉的特征的位置),相当于滤波器(高通->增强边缘,使得图像清晰;低通->消除噪声)

图像分割

语义分割和非语义分割的共同之处都是要分割出图像中物体的边缘,但是二者也有本质的区别,用通俗的话介绍就是非语义分割只想提取物体的边缘,但是不关注目标的类别。而语义分割不仅要提取到边缘像素级别,还要知道这个目标是什么.同时,语义分割中又包含像素级的语义分割****(确定每个像素所属类别,仅仅区分类间区别FCN)实例分割(可以对类内元素进行区分,神经网络中的MAK-RCNN)
非语义分割:

  • 阈值分割:OSTU和自适应阈值化

  • 区域分割 :区域生长;区域分裂合并;分水岭算法(基于掩模的分水岭算法不会产生过分分割的效果(由噪声或其他不规律因素导致)分割流程:灰度化->二值化->距离变换(计算非零像素到零像素的最短距离,根据距离设置不同的灰度值)->寻找种子,根据距离变换的结果确定确切的前景和不确切的区域->-生成掩模图像>dst= cv.watershed(image,markers=markers)

    binary表示二值化后的图片;opening表示进行开运算消除噪声后的结果;第三个表示进行dilated运算后的膨胀图像,生成扩大的前景对象;第四个是进行距离变换后的图像(由opening对象的结果作为输入得到的);第五个显示确切的前景对象;第六个显示扩大的前景对象与确切的前景对象的差值对象;最后一张图是进行形态学操作后的图像

  • 聚类:K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下图:
    在这里插入图片描述

  • 边缘分割:常用差分求图像梯度,而在物体边缘处,可以利用梯度阈值进行分割。对于阶跃状边缘,其位置对应一阶导数的极值点,对应二阶导数的过零点(零交叉点)。因此常用微分算子进行边缘检测
    一阶微分算子有Roberts算子(它的定位精度高,对于水平和垂直方向的边缘,检测效果较好,而对于有一定倾角的斜边缘,检测效果则不理想,存在着许多的漏检。另外,在含噪声的情况下,Roberts 算子不能有效的抑制噪声,容易产生一些伪边缘。因此,该算子适合于对低噪声且具有陡峭边缘的图像提取边缘。)、Prewitt算子和Sobel算子(grad_x = cv.Sobel(image, cv.CV_32F, 1, 0) 1.0代表x方向的微分,0,1代表y方向 gradx = cv.convertScaleAbs(grad_x) gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0))二阶微分算子有Laplace(边缘更细腻(dst = cv.Laplacian(image,cv.CV_32F)
    lpls = cv.convertScaleAbs(dst)))算子和****Kirsh算子等。由于边缘和噪声都是灰度不连续点,在频域均为高频分量,直接采用微分运算难以克服噪声的影响。因此用微分算子检测边缘前要对图像进行平滑滤波。LoG算子和Canny算子是具有平滑功能的二阶和一阶微分算子,边缘检测效果较好,因此Canny算子也是应用较多的一种边缘分割算法(1.高斯模糊 - GaussianBlu 2.灰度转换 - cvtColor 3.计算梯度 - Sobel/Scharr 4.非极大值抑制 5.高低阈值输出二值图像 edge_output = cv.Canny(grad_x, grad_y, 30, 150,apertureSize=3) 30 为低阈值,150为高阈值,3 为sobel算子的卷积核大小。

  • 直方图:直方图图像分割算法利用统计信息对图像进行分割。通过统计图像中的像素,得到图像的灰度直方图,然后在直方图的波峰和波谷是用于定位图像中的簇

  • 水平集 :图像分割的实质就是曲线的演变,随意选取一条初始曲线,自适应的控制曲线中的点的运动的速度和方向,根据梯度值变化的大小来确定点运动的速度和方向的大小,对于分割曲线来说,它是一系列的某个level下的随着时间变化的点的结合

图像形态学操作

  • 开运算: 先腐蚀,后膨胀
    它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用
    方法:灰度化->二值化->构建核(cv.getStructuringElement)->cv.morphologyEx

  • 闭运算: 先膨胀,后腐蚀
    它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。
    方法:灰度化->二值化->构建核(cv.getStructuringElement)->cv.morphologyEx

图像的特征提取

纹理特征

纹理特征的提取方法比较简单,它是用一个活动的窗口在图像上连续滑动,分别计算出窗口中的方差、均值、最大值、最小值及二者之差和信息熵等,形成相应的纹理图像。纹理特征不是基于像素点的特征,它需要在包含多个像素点的区域中进行统计计算。这种区域性的特征具有较大的优越性,不会由于局部的偏差而无法匹配成功。作为一种统计特征,纹理特征常具有旋转不变性,并且对于噪声有较强的抵抗能力。纹理特征也有其缺点,一个很明显的缺点是当图像的分辨率变化时,所计算出来的纹理可能会有较大偏差。另外,由于有可能受到光照、反射情况的影响从2-D图像中反映出来的纹理不一定是3-D物体表面真实的纹理。
方法:
灰度共生矩阵(计算相邻像素级的在整幅图像的统计值),对于纹理变化快的图像,矩阵对角线两侧的值较大,对角线上的值较小,变化缓慢,则矩阵对角线上的值小 。通过矩阵可以计算相应的对比度(值越大,图像越清晰),能量(矩阵中的值越小,表示图像越细致)当共生矩阵中所有值均相等或者像素值表现出最大的随机性时,熵最大;因此熵值表明了图像灰度分布的复杂程度,熵值越大,图像越复杂。

形状特征

Hough变换(直线检测和圆检测)
利用图像全局特性而将边缘像素连接起来组成区域封闭边界lines = cv.HoughLines(edges, 1, np.pi/180, 200)返回值就是(ρ,θ)。ρ 的单位是像素,θ 的单位是弧度。对图像中直线的殘缺部分、噪声以及其它共存的非直线结构不敏感。第二和第三个值分别代表 ρ 和 θ 的精确度。第四个参数是阈值,只有累加其中的值高于阈值时才被认为是一条直线

边界方向直方图HOG:
先利用微分算子,得到图像的边缘信息,然后做出关于边缘大小和方向的矩阵->构造图像灰度梯度方向矩阵(HOG)(归一化->l计算梯度-》基于梯度幅值的方向权重投影(将梯度方向划分为N等分,将图像分成多个小的cell,计算每个cell中的梯度方向的幅值,每m个cell合并为一个block,block的维数为(n*m维),将多个block进行归一化处理,将多个block串联起来就得到了该图像的特征描述子)

HOG的优点:
HOG表示的是边缘(梯度)的结构特征,因此可以描述局部的形状信息;
位置和方向空间的量化一定程度上可以抑制平移和旋转带来的影响;
采取在局部区域归一化直方图,可以部分抵消光照变化带来的影响。
由于一定程度忽略了光照颜色对图像造成的影响,使得图像所需要的表征数据的维度降低了。而且由于它这种分块分单元的处理方法,也使得图像局部像素点之间的关系可以很好得到的表征。

HOG的缺点:
描述子生成过程冗长,导致速度慢,实时性差;
很难处理遮挡问题。
由于梯度的性质,该描述子对噪点相当敏感
比较sift描述子:
sift描述子特征提取是将一组图像的sift关键点存储在数据库中,通过比对新的图像的sift描述子与数据库总的描述子之间的欧几里得距离找到候选的匹配特征,基于阈值判断是否匹配成功
区别
SIFT是基于关键点特征向量的描述,而HOG是将图像均匀的分成相邻的小块,然后在所有的小块内统计梯度直方图。
SIFT需要对图像尺度空间下对像素求极值点,而HOG中不需要。

2020-02-20 14:56:03 lanshahewu 阅读数 24
  • 深度学习--实现图片分析及目标定位视频教学

    基于深度学习实现图片分析及目标定位视频教程,通过计算机视觉和大数据、深度学习的结合,将积累的医学数据转化为可用的模型,利用图像处理和机器学习算法对图像进行分析,检测异常部分,利用AI技术克服不同操作人员之间的主观性差异,减轻人工处理的工作量,让计算机在精确度和速度上帮助医生提高诊断效率。

    1208 人正在学习 去看看 CSDN讲师

上一篇博文对Laplace图像处理做了基本的阐述,但是由于使用的get和set方法,无疑无法提高图像处理的效率。这里使用另一种方式对其处理,就是最常用的并且是c#处理位图图像的重要:BitmapData ,对图像作进一步的处理。
首先来看一下bitmapData类的使用过程

在这里插入代码片
BitmapData sourceData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
byte[] pxielBuffer = new byte[sourceData.Stride * sourceData.Height];
Marshal.Copy(sourceData.Scan0, pxielBuffer, 0, pxielBuffer.Length);
bitmap.UnlockBits(sourceData);

这里关于BitmapData类的说明,论坛里有很多,这里可以看看这个博文的BitmapData类,这里不做过多的解释,参照以上的代码说几个需要注意的地方:
(1)使用时注意lockBits和unlockBits要配对使用,就是上锁和开锁要结合使用,记得释放资源。
(2)注意这里的ImagelockMode.ReadOnly,(这里这样的理解有问题,详细看第(4)条)这里是先将图片数据锁进内存中,然后把内存中的数据读出来,所以是ReadOnly,等到结尾,要把数据返回去的时候就要用ImagelockMode.WriteOnly,这两处是不一样的。
(3)使用该命令时要注意PixelFormat.Format32bppRgb,就是说这个图片是32位,还是24?16?8?因为这个参数影响着对后面编程时指针的偏移量,不然移错位了就没法显示了
(4)Marshal.Copy方法,这个刚学的是由尤其要注意,这里说一下我最开始的理解,但是不够严谨,因为数组只要实例化了,就都在内存中了,不存在复制到内存内外了!这里暂且这么帮助理解吧
我这里要复制出来的目标对象格式是byte[ ]的数组,在用的时候,一定要注意被Copy对象的格式,还有Copy目标的格式)。
还是参考一下Marshal.Copy的用法吧(怎么看?在软件界面中找到并左键Copy这个词,显示这个方法被选中,然后右键选择速览定义或者转到定义),如下图:
在这里插入图片描述
这里可以看到,Marshal.Copy的用法多达16种,刚学的新手一定要注意,Copy方法仅仅是一个复制命令,但是这个Copy相对于内存中的数据来说,是往内存中复制,还是往内存外复制,这两个过程对应的source和destination是不一样的,那用的时候就要注意要找对应的格式去套用。如果不注意,新手在照葫芦画瓢i的时候可能会一脸懵逼,一样的Copy方法,为啥前后用的时候里面的参数不一样。。。
(5)这里有一点要注意,要单独说一下,Stride,关于这个属性的说明,前面的博文链接中讲的很清楚,可以自行看,我们这里简单记一下,在bitmapdata类中用到的都是.Sride的属性,而不是.Width的属性。

基本上要注意的就这么多,下面我们来看一下具体的代码实现过程:

在这里插入代码片
​static Bitmap Laplace(Bitmap bitmap, int [,]filterMatrixOfLaplace, double factor = 1,int bias = 0)
        {
            StringBuilder sbsourcedata = new StringBuilder();

            BitmapData sourceData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
            byte[] pxielBuffer = new byte[sourceData.Stride * sourceData.Height];
            byte[] resultBuffer = new byte[sourceData.Stride * sourceData.Height];
            Marshal.Copy(sourceData.Scan0, pxielBuffer, 0, pxielBuffer.Length);
            bitmap.UnlockBits(sourceData);

            //将sourcedata数据显示出来
            sbsourcedata.Append(sourceData.ToString());
           // richTextBox1.Text = sbsourcedata.ToString();
            //将sourcedata数据显示出来
            float rgb = 0;
            for (int k = 0; k < pxielBuffer.Length; k += 4)
            {
                rgb = pxielBuffer[k] * 0.11f;
                rgb += pxielBuffer[k + 1] * 0.59f;
                rgb += pxielBuffer[k + 2] * 0.3f;

                pxielBuffer[k] = (byte)rgb;
                pxielBuffer[k + 1] = pxielBuffer[k];
                pxielBuffer[k + 2] = pxielBuffer[k];
                pxielBuffer[k + 3] = 255;
            }

            int filterWidth = filterMatrixOfLaplace.GetLength(1);
            int filterHeight = filterMatrixOfLaplace.GetLength(0);

            int filterOffset = (filterWidth - 1) / 2;
            int calcOffset = 0;

            int byteOfffset = 0;

            for (int offsetY = filterOffset; offsetY < bitmap.Height - filterOffset; offsetY++)
            {
                for (int offsetX = filterOffset; offsetX < bitmap.Width - filterOffset; offsetX++)
                {
                    double blue = 0;
                    double green = 0;
                    double red = 0;

                    byteOfffset = offsetY * sourceData.Stride + offsetX * 4;//将指针偏移到红点

                    for (int filterY = -filterOffset; filterY <= filterOffset; filterY++)
                    {
                        for (int filterX = -filterOffset; filterX <= filterOffset; filterX++)
                        {
                            //calcOffset = byteOfffset + filterX * 4 + filterY * sourceData.Stride;//将指针偏移到第一个蓝点
                            calcOffset = byteOfffset + (filterX * 4) + (filterY * sourceData.Stride);

                            blue += (double)(pxielBuffer[calcOffset]) * filterMatrixOfLaplace[filterY + filterOffset, filterX + filterOffset];
                            green += (double)(pxielBuffer[calcOffset + 1]) * filterMatrixOfLaplace[filterY + filterOffset, filterX + filterOffset];
                            red += (double)(pxielBuffer[calcOffset + 2]) * filterMatrixOfLaplace[filterY + filterOffset, filterX + filterOffset];

                        }
                    }

                    blue = blue * factor + bias;
                    green = green * factor + bias;
                    red = red * factor + bias;

                    if (blue < 0)
                    { blue = 0; }
                    else if (blue > 255)
                    { blue = 255; }

                    if (green > 255)
                    { green = 255; }
                    else if (green < 0)
                    { green = 0; }

                    if (red > 255)
                    { red = 255; }
                    else if (red < 0)
                    { red = 0; }


                    resultBuffer[byteOfffset] = (byte)blue;
                    resultBuffer[byteOfffset + 1] = (byte)green;
                    resultBuffer[byteOfffset + 2] = (byte)red;
                    resultBuffer[byteOfffset + 3] = 255;

                }
            }





            Bitmap resultBitmap = new Bitmap(bitmap.Width, bitmap.Height);
            BitmapData resultBitmapData = resultBitmap.LockBits(new Rectangle(0, 0, resultBitmap.Width, resultBitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);
            Marshal.Copy(resultBuffer, 0, resultBitmapData.Scan0, resultBuffer.Length);
            resultBitmap.UnlockBits(resultBitmapData);
            return resultBitmap;
        }

我这里把使用bitmapData的过程写成了一个函数,这样在主程序中直接调用这个函数就可以了,这样做可以极大的精简主程序,同时也可以使程序变得更加灵活。
这里,代码的整个逻辑思维和前一篇博文的思维是一样的,做个说明如下:
在这里插入图片描述
以上博文代码我都附带发出来,大家可以相互交流学习。当然了,关于在C#中能够完成图像处理还有其他的方法,我们后续继续讨论

2017-03-24 09:42:08 Eric_Blog_CSDN 阅读数 765
  • 深度学习--实现图片分析及目标定位视频教学

    基于深度学习实现图片分析及目标定位视频教程,通过计算机视觉和大数据、深度学习的结合,将积累的医学数据转化为可用的模型,利用图像处理和机器学习算法对图像进行分析,检测异常部分,利用AI技术克服不同操作人员之间的主观性差异,减轻人工处理的工作量,让计算机在精确度和速度上帮助医生提高诊断效率。

    1208 人正在学习 去看看 CSDN讲师

1、在计算图像局部窗口统计分布时应用了一次积分和二次积分图像,计算效率大幅提高。


2、对每个像素都是基于局部窗口的统计特性,逐一进行灰度值的调整,能够较好地显示当前像素和周围的对比关系,对场景有很好适应性。


3、一次积分是指:  ID+IA-IB-IC

2017-04-13 19:51:09 UruseiBest 阅读数 1317
  • 深度学习--实现图片分析及目标定位视频教学

    基于深度学习实现图片分析及目标定位视频教程,通过计算机视觉和大数据、深度学习的结合,将积累的医学数据转化为可用的模型,利用图像处理和机器学习算法对图像进行分析,检测异常部分,利用AI技术克服不同操作人员之间的主观性差异,减轻人工处理的工作量,让计算机在精确度和速度上帮助医生提高诊断效率。

    1208 人正在学习 去看看 CSDN讲师

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
说实在的,由于效率问题,vb一直对于处理视频、图像之类都处于劣势。网上介绍c++处理图像的网页很多,书也很多。相对的,vb的比较少。

当然,并不意味着vb不能用来处理图像,这篇开始,我介绍一些主要的图像处理的方法,在后面的教程中,我还要介绍一些提高效率的方法。

但是还是要先请从像素法开始,因为这个方法更好理解算法。

 

vb.net处理图像,主要使用到Bitmap 类的 GetPixel() 方法和SetPixel()方法。

大致的窗体,上面的图片框显示原图片,下面的图片框显示处理后的图片。

1、前期准备

a、由于图片需要多次处理,定义一个窗体级的bitmap对象

 

 Dim sourceImg As Bitmap

 

 

 

 

 

 

 

 

b、载入图片代码,考虑到窗体载入的时候比paint早,为了简化,在按下按钮时显示在图片框内,同时简化使用固定图片演示。

    Private Sub formMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        sourceImg = Image.FromFile("d:\15.jpg")
    End Sub

    Private Sub btnLoadimg_Click(sender As Object, e As EventArgs) Handles btnLoadimg.Click
        picSource.Image = sourceImg
    End Sub

 

2、RGB通道的分离:

使用GetPixel()在原图片上取色,然后使用SetPixel(),

原图像:颜色值color=RGB

处理后的图像:

红色通道:color=RRR

绿色通道:color=GGG

蓝色通道:color=BBB

 

代码如下:

    '红色通道
    Private Sub btnRed_Click(sender As Object, e As EventArgs) Handles btnRed.Click
        Dim pSourceColor As Color
        Dim pDestColor As Color

        Dim destImg As New Bitmap(sourceImg.Width, sourceImg.Height)
        Dim R, G, B As Integer

        For i As Integer = 0 To sourceImg.Width - 1
            For j As Integer = 0 To sourceImg.Height - 1
                pSourceColor = sourceImg.GetPixel(i, j)
                R = pSourceColor.R
                G = pSourceColor.G
                B = pSourceColor.B
                pDestColor = Color.FromArgb(R, R, R)
                destImg.SetPixel(i, j, pDestColor)
            Next
        Next
        picDest.Image = destImg
    End Sub

显示如下:

 

    '绿色通道
    Private Sub btnGreen_Click(sender As Object, e As EventArgs) Handles btnGreen.Click
        Dim pSourceColor As Color
        Dim pDestColor As Color

        Dim destImg As New Bitmap(sourceImg.Width, sourceImg.Height)
        Dim R, G, B As Integer

        For i As Integer = 0 To sourceImg.Width - 1
            For j As Integer = 0 To sourceImg.Height - 1
                pSourceColor = sourceImg.GetPixel(i, j)
                R = pSourceColor.R
                G = pSourceColor.G
                B = pSourceColor.B
                pDestColor = Color.FromArgb(G, G, G)
                destImg.SetPixel(i, j, pDestColor)
            Next
        Next
        picDest.Image = destImg
    End Sub

显示如下:

    '蓝色通道
    Private Sub btnBlue_Click(sender As Object, e As EventArgs) Handles btnBlue.Click
        Dim pSourceColor As Color
        Dim pDestColor As Color

        Dim destImg As New Bitmap(sourceImg.Width, sourceImg.Height)
        Dim R, G, B As Integer

        For i As Integer = 0 To sourceImg.Width - 1
            For j As Integer = 0 To sourceImg.Height - 1
                pSourceColor = sourceImg.GetPixel(i, j)
                R = pSourceColor.R
                G = pSourceColor.G
                B = pSourceColor.B
                pDestColor = Color.FromArgb(B, B, B)
                destImg.SetPixel(i, j, pDestColor)
            Next
        Next
        picDest.Image = destImg
    End Sub

显示如下:

 

 

 

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看 vb.net 教程 目录

 

 

 

2018-11-24 23:48:52 SherlockS6 阅读数 633
  • 深度学习--实现图片分析及目标定位视频教学

    基于深度学习实现图片分析及目标定位视频教程,通过计算机视觉和大数据、深度学习的结合,将积累的医学数据转化为可用的模型,利用图像处理和机器学习算法对图像进行分析,检测异常部分,利用AI技术克服不同操作人员之间的主观性差异,减轻人工处理的工作量,让计算机在精确度和速度上帮助医生提高诊断效率。

    1208 人正在学习 去看看 CSDN讲师

图像处理技术在刑事侦查中的应用

电子科技大学 格拉斯哥学院 2017级李舒苗

摘要

  • 本文是基于电子科技大学新生研讨课上所了解到的内容,个人在课下思考后的想法。在曾兵教授的课上,我们第一次了解到了图像与视频处理技术。我认为该项技术目前所能达到的成果可以用来改善对我国刑事侦查有着重大辅助作用的视频监控技术,利用图像增强和图象复原可以辨别模糊或有损图像,利用图像编码压缩可以保证在无损图像完整性的情况下降低占比空间,提高传输效率。与此同时,图像与视频技术在解决监控技术的不足同时,如果结合其他技术,也能挖掘出更多的发展前景。
  • 关键词:视频监控技术,图像与视频处理技术,图像增强,图像复原,图像编码压缩

背景及问题

  • 国内摄像头现状
    随着监控技术在国内的高速发展,我国刑事侦查的效率提高了很多,社会治安也相对稳定了很多。视频监控技术目前已是我国刑事侦查四大重要技术之一,该技术能够直观反映事件的真实情况,对后续判断事件全貌有很大的帮助。现如今视频监控虽然已经几乎遍布全国,但是相比于国外的视频监控技术,国内起步晚并且技术尚未成熟。目前国内大多数视频监控采用的是数字格式的储存方式,在很多情况下,由于外界干扰导致的部分信息损坏或者环境影响,图像的清晰度和反映事件的真实程度并不高,导致办案人员无法准确判断事件的真实性;其次,由于数字图像的占用空间较大,在进行图像传输过程中可能会导致传输效率过慢。
  • 存在问题
    目前监控技术的问题主要是三个方面:
    一、由于外界干扰或设备本身问题,导致输出的图像清晰度不够高。
    二、由于环境原因(如天气、光照),视频图像收到干扰。
    三、由于数字图像空间占用大的原因,视屏传输效率低下。
  • 研究目的
    一、利用课堂上了解到的图像与视频处理技术,改善现如今国内视屏监控技术的三个缺陷。
    二、结合更多的图像处理技术,更好地改进国内视屏监控技术,使得该技术能够提高刑事侦查的准确率和效率。

改善方法

  • 数字图像处理介绍
    数字图像是由许多像素组成的,而每一个像素包含了图像的多个属性,由于其数据的庞大,在图像处理中多用矩阵来表示图像的不同信息参数。对于要求达到特定目标效果的图像,如何利用已知参数对图像进行智能优化的问题便化为了如何利用算法对特定矩阵的处理问题。
  • 图像与视频处理技术
    在新生研讨课上,曾兵教授为我们简单介绍了图像处理的几个基本方法,同时也介绍了他所研究的图像与视频处理技术能够带来的视觉效果。我觉得这项技术很有启示作用,适当应用便可以有效的解决以上两个问题。
    (一)利用图像增强和复原技术提高清晰度
    曾兵教授通过多组图像的对比,让我们直观的感受到了不同图像分辨率的效果。他也向我们介绍了如何通过算法对不清晰图像进行智能优化,即用图像增强和复原技术来达到提高图片质量的目的。
    图像增强技术就是突出图像中感兴趣的目标,例如强化图像中的高频分量以使目标物轮廓清晰,或是强化图像中的低频分量以减低图像中的噪声影响。该技术可以将原视频图像中的特定人物或事物进行改良处理,解决由于设备配置不够高而导致的清晰度低的问题,使得目标的轮廓清晰,分辨率变高,方便人们观察。利用该技术与物理模型清晰化算法可以有效还原恶劣环境(如雾霾)条件下的图像,曾兵教授也向我们展示了如何辨别严重雾霾下的城市原貌。这便可以解决由于环境影响带来的视屏监控效果不好的问题。
    图像复原技术则相对复杂很多,图象复原技术需要对图像质量下降的原因进行分析,建立相应模型来进行滤波处理,尽最大可能重现由于外界干扰带来的图像损失部分,重建原先的图像。该技术可以解决由于外界干扰导致的图像有损问题,更加完整地还原事件本身。
    (二)利用图像编码压缩减少视频占用空间
    图像编码压缩有两大类别,分别是无损压缩与有损压缩。考虑到刑事侦查时最核心的要求是还原事件的真实场景,无损压缩是最佳选择。压缩在实际应用中,要求对原图像进行有效处理,在压缩文件大小的同时注重原图像的完整性。但是这种技术相比于有损压缩其硬件需求大,占的内存也相对较高,如何改善该技术还有待后人研究。
  • 更多应用前景
    图像与视频处理技术除了可以解决以上三个视频监控的问题外,还有更多的发展前景。其一便是利用高分辨率的视频监控对特定人物进行人脸识别或是对特定车牌号进行识别并追加跟踪功能,这样便可以更加快速有效地找到的相关人物的行踪,减少刑事侦查人员的工作量而且相对效率也将提高。其二便是利用背景建模和图像优化的技术,分辨出不动的背景和运动的前景对象,这样便能帮助侦查人员分辨出一些不易发现的细节,更加真实地还原现场。

结论

  • 图像与视频处理技术能够对图像进行智能优化,选择性地提高图像的特定性能或者获取图像的特定信息。利用图像增强和复原技术,可以优化由于外界干扰或者设备配置不够高的问题导致的模糊图像;结合以上技术和图像分割技术以及相应的物理模型,可以构建在恶劣天气下的图像全貌;改良图像编码中的无损编码技术,可以有效压缩视频文件,减少占用空间,再加快传输速度的同时保证原图像的完整度。以上的技术如果能结合现有的智能识别功能,便可以有效追踪特定目标,提高办案效率;除此之外,结合背景建模,可以辨别一些肉眼不易看到的细节,更加真实还原现场。总而言之,该项技术的发展不仅可以有效改善国内视频监控技术的不足,而且对未来大数据时代的帮助也是不言而喻的。

参考文献

[1]张爽.公安数字图像处理技术应用中存在的问题及解决方案[J].民营科技,2017(07):90+191.
[2]邹峥.视频监控图像侦查中图像处理技术的新运用[J].人民法治,2018(18):60-61.
[3]孙月红. 雾霾天图像清晰化方法的研究与实现[D].西安科技大学,2018.

(本文纯属个人见解,内容全部原创,相应知识和技术参考电子科技大学曾兵教授新生研讨课的教学内容和相应论文,若有任何言辞问题,请谅解)

没有更多推荐了,返回首页