• 问题描述(一):

    运用图像处理的方法去除上图中背景黑色字印记。

  • 问题的分析与解决(一):

    拿到这个问题,作为一个图像处理的小白,第一反应是能不能像使用PS一样,把这张RGB的图片转化为ARGB的图片。接着,把其中背景的Alpha通道设置为0,即将背景设置为全透明,这样便提取出了前景。然后,新建一个白色的画布将前景放上去,就处理得到了一张背景纯白的图片。

    转念一想,如何将前景和背景区分出来才是关键,要不然就是对全图调整透明度,无法达到预期效果。

    我们知道,在图像处理中,大多都使用灰度图。在RGB模型中,假设R=G=B时,则彩色表示一种灰度颜色,当中R=G=B的值叫灰度值,因此,灰度图像每一个像素仅仅需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。灰度是指只含亮度信息,不含色彩信息的图像。黑白照片就是灰度图,特点是亮度由暗到明,变化是连续的。要表示灰度图,就需要把亮度值进行量化。之所以都使用灰度图,是因为灰度图有以下好处:

    1. RGB的值都一样。
    2. 图像数据即调色板索引值,就是实际的RGB值,也就是亮度值。
    3. 因为是256色调色板,所以图像数据中一个字节代表一个像素,很整齐。

    于是咱们首先把原图转化为灰度图,使用以下代码将原图读入MATLAB程序并进行灰度化:

I=imread('example.jpg');
G=rgb2gray(I);  %灰度化

同时,我们可以看一下灰度图的直方图,使用以下代码输出灰度图及其直方图:

figure,imshow(G) %窗口显示灰度图,如果前不加figure,那么后续只要出现imshow,那么将会覆盖掉这个显示灰度图的窗口
figure,imhist(G) %窗口显示直方图

灰度图:

直方图:

从直方图中我们可以看出灰度值50至100之间有一个极小的峰值;而灰度值150至200之间有一个极大的峰值,一共有两个峰值。这两个分布分别代表前景和背景,我们的目标是找到一个阈值将前景和背景分开,这其实就是二值化的概念。

于是我突然想到可以使用最大类间方差法(Otsu)实现图像二值化。该方法是图像二值化处理常见方法之一,在Matlab与OpenCV中均有实现。Otsu Threshing方法是一种基于寻找合适阈值实现二值化的方法,其最重
要的部分是寻找图像二值化阈值,然后根据阈值将图像分为前景(白色,255)或者背景(黑色,0)。在Matlab中可以使用如下代码利用Otsu法寻找合适阈值进行图像二值化:

threshold = graythresh(G); %使用最大类间方差法找到图片的一个合适的阈值(threshold)
bw=im2bw(G, threshold);  %将灰度图像转换为二值图像,二值化默认阈值是0.5,这里使用Otsu法求出的threshold

这时得到二值化后的图像如下:


此时,我们已经基本实现问题描述(一)中的要求,已经去除了背景黑色字印记。本来可以收工了,但是强迫症患者表示二值图中还有黑色的噪点,于是还得继续处理啊。

  • 问题描述(二):

    去除二值图上的噪点(红色椭圆圈出)。

  • 问题的分析与解决(二):

    首先,我们的目标是去除二值图上的噪点,这些本来相对不明显的噪点因为二值化而显现为黑色。为了解决这个问题,我第一时间想到是膨胀、腐蚀这种形态学的方法。

    原图像进行膨胀和腐蚀运算后的效果为:膨胀运算可使图像扩展,使其颗粒变大,线条变粗,孔和缝隙减小或消失;腐蚀运算可使图像收缩,使其颗粒变小,线条变细,孔和缝隙增大。膨胀和腐蚀运算产生的效果为:根据膨胀运算的特性,膨胀运算可用于图像暗细节的消除和亮区域边缘的增强;根据腐蚀运算的特性,腐蚀运算可以用于图像亮细节的消除和减弱亮区域边缘。

    开运算(先腐蚀再膨胀)和闭运算(先膨胀再腐蚀)产生的效果:(1)灰度开运算可消除比结构元素尺寸小的亮细节,(2)闭运算可消除比结构元素小的暗细节。通常,用开运算来抑制正脉冲噪声,消除图像毛刺及孤立斑点,除去“l”噪声(要比结构元素小);闭运算则用来抑制负脉冲噪声,填充图像漏洞和裂缝,补充“0”噪声(要比结构元素小)。

    由于上述对膨胀、腐蚀、开运算和闭运算能够产生的效果的描述都是针对灰度值为255的高亮区域的,即对高亮部分的膨胀就是对黑色部分的腐蚀,对高亮部分的闭运算就是对黑色部分的开运算。于是,我认为对原二值图像的膨胀或闭运算可能能消除掉这些黑色的噪点,于是使用代码实验如下:

se=strel('square',2); %方型结构元素
extend = imdilate(bw, se); %对二值图像做膨胀处理
fc=imclose(bw,se); %直接闭运算

对高亮部分进行膨胀(相当于腐蚀黑色部分):

对二值图像做闭运算:

可以看出,不管是膨胀还是闭运算,黑色噪点得到了一定地消除,不过并不完全,有较大的噪点依旧保留下来,同时对需要保留下来的轮廓产生了一定程度的影响,不能达到理想效果。

正在我冥思苦想之时,我同学点拨了我。不管是膨胀还是腐蚀用来去噪,都只能处理相对较小的噪点。由于二值图像中某些噪点不只有一个像素,所以不能完全去除干净。可以使用连通域的方法,把黑色噪点当作一个连通域,通过找到一个阈值,去除低于阈值大小的连通域来去除噪点。于是通过查阅文献,发现可以使用Matlab中的bwareaopen函数来去除连通域。

因为连通域操作,操作的连通域是白色部分,所以如果需要处理的图中需要做连通域的部分是黑色的,就需要做一个灰色反转。如果是灰度图像: img = 255 - img; 如果是二值图像: img = 1 - img。于是我们通过以下代码把黑色噪点当作小的连通域进行去除。经过试验,我们选取set_noise阈值为24时效果对该二值图效果最好。

bw = 1-bw; %灰度反转
img = bwareaopen(bw,24); %对bw图像做连通域操作,去除那些像素数据小于24(set_noise)数目的连通域块
img = 1-img; %灰度再反转回来
figure,imshow(img)

通过去除小的连通域(黑色噪点)得到处理后的最终图片:

代码如下:

clear
close all
I=imread('example.jpg');
figure,imshow(I)
G=rgb2gray(I);  %灰度化
figure,imshow(G) %窗口显示灰度图,如果前不加figure,那么后续只要出现imshow,那么将会覆盖掉这个显示灰度图的窗口
figure,imhist(G) %窗口显示直方图
threshold = graythresh(G); %使用最大类间方差法找到图片的一个合适的阈值(threshold)
bw=im2bw(G, threshold);  %将灰度图像转换为二值图像,二值化默认阈值是0.5,这里使用Otsu求出的threshold
figure,imshow(bw)
bw = 1-bw; %灰度反转
img = bwareaopen(bw,24); %对bw图像做连通域操作,去除那些像素数据小于24(set_noise)数目的连通域块
img = 1-img; %灰度再反转回来
figure,imshow(img)

CV小白成长记之一:去除图片背景印记及噪点相关推荐

  1. 如何在线去除图片背景?小白也能轻松操作

    如何在线去除图片背景?可以使用压缩图的图片去底色功能,一键在线去除图片背景,小白也能轻松搞定.下面是具体操作步骤: 1.打开压缩图网站,点击导航栏图片去底色功能. 2.点击选择图片按钮上传图片,左侧可 ...

  2. 如何去除图片背景颜色?怎样将背景色变透明?

    小伙伴在处理图片的时候,一定会遇到去除图片背景色的情况,即使处理一张图片也是件很痛苦的事情.经常处理图片的小伙伴可以使用ps,对于不会PS的小伙伴如果有一款简单好用的去除图片背景颜色工具,就可以节省很 ...

  3. gif一键抠图 在线_remove.bg 自动抠图、一键去除图片背景的免费在线工具

    傻瓜式操作,一键实现 PS 抠图一样的效果,有了它谁还用 PS 抠图? remove.bg 一键抠图 remove.bg 是一款强大的自动去除图片背景的在线工具,只需要上传图片,自动帮你去掉背景留下主 ...

  4. 小白成长记第2期:简单易操的YouTube美金项目,get!

    这里是小白成长记,立志于帮助新人小白们成长,我是小白 之前小白一直在说国内的互联网创业项目,其实,不仅仅是国内,国外也会有一些好的项目,只要会简单的操作,就算是真小白也可以轻松操作.那么我们今天就来详 ...

  5. python去除图片复杂背景_如何去除图片背景?这款一键抠图软件帮你

    对有些小伙伴来说,使用PhothoShop去除图片背景,抠出想要的元素,操作过程繁琐又复杂.今天给大家分享一款好用的抠图软件,简单几步,即可去除图片背景. 傲软抠图是一款专业的智能抠图软件,只需你上传 ...

  6. remove.bg - 自动抠图、一键去除图片背景的免费在线工具

    傻瓜式操作,一键实现 PS 抠图一样的效果,有了它谁还用 PS 抠图? remove.bg 一键抠图 remove.bg 是一款强大的自动去除图片背景的在线工具,只需要上传图片,自动帮你去掉背景留下主 ...

  7. CorelDRAW快速去除图片背景颜色

    当我们需要从网上借助一些素材图片在CorelDRAW中运用时,往往需要去掉图片的背景颜色.本文小编分享CDR中如何快速去除图片背景颜色的方法,通过此方法可以做简单的照片抠图.合成. 1. 打开Core ...

  8. 小白成长记(一、ERP之增删改查)

    小白成长记(一.ERP之增删改查) 第一个项目-ERP之增删改查基本操作 hello,大家好.我是闲齁齁,一名刚工作六个月的.NET程序员,这篇文章主要用于记录我的第一个项目-ERP.我们的ERP主要 ...

  9. python 开课了_解答你学习Python的困惑,《Python小白成长记》开课啦

    原标题:解答你学习Python的困惑,<Python小白成长记>开课啦 继<Python轻松学>和<Python-turtle图形编程入门>两门Python课程后, ...

最新文章

  1. MySQL + JSON = 王炸!!
  2. 一道暴力枚举题Win32版本示例
  3. rgb fusion检测不到显卡_【论文阅读27】Co-Fusion
  4. SQL注入学习part03:(结合sqli-libs学习:21-30关)
  5. 数据持久化基础知识——属性列表
  6. 阶段3 1.Mybatis_12.Mybatis注解开发_2 mybatis注解开发测试和使用注意事项
  7. Visual C++ 2010 Express 下载及详细安装教程(VC2010)
  8. 李白的藏头诗鸿蒙圣安卓,李白藏头诗生成器
  9. U盘启动制作 + xp镜像
  10. dedecms源码分析(第一部分)
  11. Dynamics 365 设置SMTP邮箱配置时凭据为灰色无法编辑的解决方法
  12. 常用工具类之jwt的学习使用
  13. 微信小程序基于百度云实现图文识别(胎教级教程)
  14. 神经网络与机器学习 pdf 全文内容详细分享
  15. 偏差,残差,方差在机器学习中的区别
  16. CSS 添加背景图片
  17. 20180814 实习小结关于前端
  18. 数学分析(5): 导数
  19. 诺基亚(Nokia 5110)5110屏驱动(STM32)
  20. 漫谈广告机制设计 | 从维纳斯的七个香吻说起

热门文章

  1. mysql如何避免脏读_mysql避免脏读
  2. Vivado IP核被锁的解除方法
  3. JAVA SE、JAVA EE、JAVA ME区别
  4. 重磅消息,有这个证书的程序员要起飞了!
  5. 亚马逊运营自然订单减少了该怎么办?
  6. 聚观早报 | 滴滴被处罚 80.26 亿元;百度发布第六代量产无人车
  7. UDK:UDK 常用快捷键
  8. 触摸屏系统中的触觉反馈功能
  9. 1+X 网络安全运营平台与管理 sql注入实验报告
  10. ctf (easy_eval)