0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

图像处理常用算法有哪些 (上)

jf_78858299 来源:CSDN 作者:不羁少年! 2023-02-08 16:42 次阅读

前言

图片处理是开发过程中经常遇到和要处理的问题,毕竟图片是比较耗系统资源,网络资源,存储空间。。。,因此,图片的处理显得格外重要,去百度查阅资料,就会看到很多关于读片处理的方法,以及图片的加载框架,他们都是用来处理图片的。

常见的图片处理方式大概有如下几类。比如图片的等比缩放,图片海量加载,图片的裁剪,图片的无损压缩,图片的旋转,图片实现画中画,图片实现阴影,改变图片形状等

然后,这些操作只是符合日常需求开发,如果涉及的高深的算法层面就不太实用,自己在做人脸识别项目中亲自体验常规处理真的难以解决高难度问题。今天,我介绍一下其他类型的图片处理算法。首先,我们需要了解俩个概念RGB和ARGB。

01

**RGB和ARGB**

**RGB**

RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内的强度值。RGB图像仅仅使用三种颜色,R(red)、G(green)、B(blue),就能够使它们依照不同的比例混合,在屏幕上呈现16777216(256 * 256 * 256)种颜色。

在电脑中,RGB的所谓“多少”就是指亮度,并使用整数来表示。通常情况下,RGB各有256级亮度,用数字表示为从0、1、2…直到255。

**ARGB**

一种色彩模式,也就是RGB色彩模式附加上Alpha(透明度)通道,常见于32位位图的存储结构。

ARGB—Alpha,Red,Green,Blue.

知道了这俩个概念,就可以了解更多较深层次的图片处理算法了。下面我介绍一下自己在做人脸识别中常用到的算法。

02

**灰度化**

在RGB模型中,假设R=G=B时,则彩色表示一种灰度颜色,当中R=G=B的值叫灰度值,因此,灰度图像每一个像素仅仅需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有下面四种方法对彩色图像进行灰度化,详细方法參考csdn大牛博客,讲的非常好。

03

**二值化**

一幅图像包含目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最经常使用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。

比方:计算每个像素的(R+G+B)/3,假设>127,则设置该像素为白色,即R=G=B=255;否则设置为黑色,即R=G=B=0。

简单实现代码如下:

{

Bitmap bitImage = new Bitmap(pictureBox1.Image);//二值化pictureBox1中的图片

Color c;

int height = pictureBox1.Image.Height;

int width = pictureBox1.Image.Width;

for (int i = 0; i < height; i++)

{

for (int j = 0; j < width; j++)

{

c = bitImage.GetPixel(j,i);

int r = c.R;

int g = c.G;

int b = c.B;

if ((r + g + b) / 3 >= 127)

{

bitImage.SetPixel(j, i, Color.FromArgb(255, 255, 255));

}

else

{

bitImage.SetPixel(j, i, Color.FromArgb(0,0,0));

}

}

}

return bitImage;

}ascript

04

**膨胀算法**

膨胀是将与物体接触的全部背景点合并到该物体中,使边界向外部扩张的过程。

能够用来填补物体中的空洞。

用3x3的结构元素,扫描图像的每个像素

用结构元素与其覆盖的二值图像做“或”操作

假设都为0,结果图像的该像素为0。否则为1

结果:使二值图像扩大一圈

膨胀(dilation)能够看做是腐蚀的对偶运算,其定义是:把结构元素B平移a后得到Ba,若Ba击中X,我们记下这个a点。全部满足上述条件的a点组成的集合称做X被B膨胀的结果。用公式表示为:D(X)={a | Ba↑X}=X腐蚀,膨胀,细化算法B,例如以下图所看到的。图中X是被处理的对象,B是结构元素,不难知道,对于随意一个在阴影部分的点a,Ba击中X,所以X被B膨胀的结果就是那个阴影部分。阴影部分包含X的全部范围,就象X膨胀了一圈似的,这就是为什么叫膨胀的原因

![图片](//file.elecfans.com/web2/M00/8F/3F/poYBAGPjXwWAYVTXAAGdzZEFSiQ676.jpg)

在下图中,左边是被处理的图象X(二值图象,我们针对的是黑点),中间是结构元素B。膨胀的方法是,拿B的中心点和X上的点及X周围的点一个一个地对,假设B上有一个点落在X的范围内,则该点就为黑;右边是膨胀后的结果。能够看出,它包含X的全部范围,就象X膨胀了一圈似的。

![图片](//file.elecfans.com/web2/M00/8F/C3/pYYBAGPjXwSAY1KwAAOC21wRXiM686.jpg)

我设计了一个简单的膨胀算法,依次遍历整个图片的像素,分析每个像素的周围八个像素,仅仅要该像素周围存在黑色的像素,就设置该像素颜色为黑色。以下是使用膨胀算法处理经过二值化后的图像的实现代码:

public bool[] getRoundPixel(Bitmap bitmap, int x, int y)//返回(x,y)周围像素的情况,为黑色,则设置为true

{

bool[] pixels=new bool[8];

Color c;

int num = 0;

for (int i = -1; i < 2; i++)

{

for (int j = -1; j < 2; j++)

{

c = bitmap.GetPixel(x+i,y+j);

if (i != 0 || j != 0)

{

if (255 == c.G)//由于经过了二值化,所以仅仅要检查RGB中一个属性的值

{

pixels[num] = false;//为白色,设置为false

num++;

}

else if(0==c.G)

{

pixels[num] = true;//为黑色,设置为true

num++;

}

}

}

}

return pixels;

}


public Bitmap expend()

{

Bitmap bitImage = new Bitmap(pictureBox2.Image);//处理pictureBox2中的图片

Bitmap bitImage1 = new Bitmap(pictureBox2.Image);

int height = pictureBox1.Image.Height;

int width = pictureBox1.Image.Width;

bool[] pixels;

for (int i = 1; i < width-1; i++)

{

for (int j = 1; j < height-1; j++)

{

if (bitImage.GetPixel(i, j).R != 0)
                {
                    pixels = getRoundPixel(bitImage, i, j);
                    for (int k = 0; k < pixels.Length; k++)
                    {
                        if (pixels[k] == true)
                        {
                            //set this piexl's color to black
                            bitImage1.SetPixel(i, j, Color.FromArgb(0,0,0));
                            break;
                        }
                    }
                }
            }
        }
            return bitImage1;


    }
看看最终执行的效果图如下:

![图片](//file.elecfans.com/web2/M00/8F/3F/poYBAGPjXwSABNzVAAAFQ6yAYyI591.jpg)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像处理
    +关注

    关注

    26

    文章

    1228

    浏览量

    55879
  • RGB
    RGB
    +关注

    关注

    4

    文章

    764

    浏览量

    57462
收藏 人收藏

    评论

    相关推荐

    数字图像基本处理算法小结

    初学图像处理,在常用算法方面,二白实在是有些头疼。就在昨天,亲爱的小白师兄,对迷茫的二白伸出了援手,为二白送来了一大份干货——图像
    的头像 发表于 01-29 14:46 944次阅读

    FPGA图像处理之CLAHE算法

    在FPGA图像处理--CLAHE算法(一)中介绍了为啥要用CLAHE算法来做图像增强。
    的头像 发表于 01-04 12:23 1509次阅读
    FPGA<b class='flag-5'>图像</b><b class='flag-5'>处理</b>之CLAHE<b class='flag-5'>算法</b>

    C语言编写的图像处理各种算法

    这里主要是用C语言编写的图像处理各种算法的程序,稍作改动就可在DSPC6000运行
    发表于 09-10 09:06

    请问基于mcfw的视频图像处理加一些自己的视频图像处理算法,应该放在什么位置?

    我想基于mcfw的采集和显示的框架下,做一下视频图像处理,在上面加一些自己的视频图像处理算法,(使用的是DVRRDK_02.00.00.2
    发表于 07-27 07:43

    图像算法什么神奇之处

    让大众认识到它的神奇。双摄算法目前,行业主流的高端手机在摄像头的配置都选用了双摄配置,双摄已经成为手机中的标准配置。双目立体视觉系统一般由双摄像机从不同角度,同时获得被测物的两幅数字图像,基于视差
    发表于 09-17 09:05

    请问改进的Ferret算法和目前常用的测量算法哪些不同?

    数字图像处理原理是什么?简单Ferret算法原理是什么?改进的Ferret算法原理哪些步骤?改进的Ferret
    发表于 04-15 06:58

    常用图像处理模块是什么?

    在实际应用中常用图像处理模块哪些
    发表于 10-30 06:20

    图像处理算法有哪些_图像处理十大经典算法

    图像处理,是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。目前大多数的图像是以数字形式存储,因而
    发表于 01-12 16:17 8.4w次阅读

    最基础的图像处理常用算法

    图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。
    的头像 发表于 04-28 16:20 3045次阅读
    最基础的<b class='flag-5'>图像</b><b class='flag-5'>处理</b><b class='flag-5'>常用</b><b class='flag-5'>算法</b>

    图像处理常用算法(基础)

    图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。
    的头像 发表于 04-30 15:26 4402次阅读
    <b class='flag-5'>图像</b><b class='flag-5'>处理</b><b class='flag-5'>常用</b><b class='flag-5'>算法</b>(基础)

    图像处理常用算法

    ,再进行边缘检测。不过,利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少,有利于后继的处理和识别工作。
    的头像 发表于 06-03 09:09 3441次阅读

    机器视觉工业缺陷检测常用图像处理算法

    常用图像处理算法: 1、图像变换:(空域与频域、几何变换、色度变换、尺度变换) 几何变换:图像平移、旋转、镜像、转置; 尺度变换:
    的头像 发表于 06-15 17:59 7050次阅读

    图像处理常用算法有哪些 (下)

    图片处理是开发过程中经常遇到和要处理的问题,毕竟图片是比较耗系统资源,网络资源,存储空间。。。,因此,图片的处理显得格外重要,去百度查阅资料,就会看到很多关于读片处理的方法,以及图片的
    的头像 发表于 02-08 16:43 596次阅读
    <b class='flag-5'>图像</b><b class='flag-5'>处理</b><b class='flag-5'>常用</b><b class='flag-5'>算法</b>有哪些 (下)

    图像处理常用算法总结

    图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界
    的头像 发表于 04-27 11:10 765次阅读
    <b class='flag-5'>图像</b><b class='flag-5'>处理</b><b class='flag-5'>常用</b><b class='flag-5'>算法</b>总结

    常用图像处理算法有哪些?

    图像处理 (Image Processing) 图像处理通常是把一幅图像变换成另外一幅图像,也就
    发表于 09-19 10:33 720次阅读
    <b class='flag-5'>常用</b>的<b class='flag-5'>图像</b><b class='flag-5'>处理算法</b>有哪些?