这真是一件悲剧的事,早上,我花了很长时间写了这篇文章

当我快要完成时,然后电脑就蓝屏了,重启后,一切都成了浮云

好啦,没耐心再写那么多了,尽量简单吧

在图像识别中,需要有边缘鲜明的图像,即图像锐化。

图象锐化的目的是为了突出图像的边缘信息,加强图像的轮廓特征,以便于人眼的观察和机器的识别。

在空间域进行图象锐化主要有以下方法

梯度算子

其他锐化算子

拉普拉斯算子

(1)梯度空间算子

图像的边缘最直观的表现就是边缘两侧的灰度值相差比较大,在微积分中我们学过梯度的概念

梯度是一个列向量,可表示为:

而某点处梯度的模很好的反应了该点两侧的变化大小

所以,梯度值很大的点也就代表了图像的边缘

而在实际计算中,为了降低运算量,一般用一下两种方法来代替模运算

由于数字图像处理中处理的是数字离散信号

所以,我们用差分来等同于连续信号中的微分运算

典型的梯度运算有

而另一种称为Roberts梯度的差分运算可由下来表示

我们来编写程序来实现上面计算

import

cv

def

Sharp(image,flag1

=

0,flag2

=

0):

w

=

image.width

h

=

image.height

size

=

(w,h)

iSharp

=

cv.CreateImage(size,

8

,

1

)

for

i

in

range(h

-

1

):

for

j

in

range(w

-

1

):

if

flag2

==

0:

x

=

abs(image[i,j

+

1

]

-

image[i,j])

y

=

abs(image[i

+

1

,j]

-

image[i,j])

else

:

x

=

abs(image[i

+

1

,j

+

1

]

-

image[i,j])

y

=

abs(image[i

+

1

,j]

-

image[i,j

+

1

])

if

flag1

==

0:

iSharp[i,j]

=

max(x,y)

else

:

iSharp[i,j]

=

x

+

y

return

iSharp

image

=

cv.LoadImage(

'

lena.jpg

'

,0)

iMaxSharp

=

Sharp(image)

iAddSharp

=

Sharp(image,

1

)

iRMaxSharp

=

Sharp(image,0,

1

)

iRAddSharp

=

Sharp(image,

1

,

1

)

cv.ShowImage(

'

iMaxSharp

'

,iMaxSharp)

cv.ShowImage(

'

image

'

,image)

cv.ShowImage(

'

iAddSharp

'

,iAddSharp)

cv.ShowImage(

'

iRAddSharp

'

,iRAddSharp)

cv.ShowImage(

'

iRMaxSharp

'

,iRMaxSharp)

cv.WaitKey(0) 我们来看看运行结果

下面是Roberts梯度

可以比较下两种方法的效果

(2)其他锐化算子

利用梯度和差分原理可以组成以下锐化算子

1.Sobel算子

2.Prewitt算子

3.Isotropic算子

好啦,我们还是写程序吧

import

cv

def

SuanSharp(image,arrayX,arrayY):

w

=

image.width

h

=

image.height

size

=

(w,h)

iSuanSharp

=

cv.CreateImage(size,

8

,

1

)

tmpX

=

[0]

*

9

tmpY

=

[0]

*

9

for

i

in

range(

1

,h

-

1

):

for

j

in

range(

1

,w

-

1

):

for

k

in

range(

3

):

for

l

in

range(

3

):

tmpX[k

*

3

+

l]

=

image[i

-

1

+

k,j

-

1

+

l]

*

arrayX[k

*

3

+

l]

tmpX[k

*

3

+

l]

=

image[i

-

1

+

k,j

-

1

+

l]

*

arrayX[k

*

3

+

l]

iSuanSharp[i,j]

=

sum(tmpX)

+

sum(tmpY)

return

iSuanSharp

image

=

cv.LoadImage(

'

lena.jpg

'

,0)

SobelX

=

[

1

,0,

-

1

,

2

,0,

-

2

,

1

,0,

-

1

]

SobelY

=

[

-

1

,

-

2

,

-

1

,0,0,0,

1

,

2

,

1

]

PrewittX

=

[

1

,0,

-

1

,

1

,0,

-

1

,

1

,0,

-

1

]

PrewittY

=

[

-

1

,

-

1

,

-

1

,0,0,0,

1

,

1

,

1

]

IsotropicX

=

[

1

,0,

-

1

,

1.414

,0,

-

1.414

,

1

,0,

-

1

]

IsotropicY

=

[

-

1

,

-

1.414

,

-

1

,0,0,0,

1

,

1.414

,

1

]

iSobelSharp

=

SuanSharp(image,SobelX,SobelY)

iPrewittSharp

=

SuanSharp(image,PrewittX,PrewittY)

iIsotropicSharp

=

SuanSharp(image,IsotropicX,IsotropicY)

cv.ShowImage(

'

image

'

,image)

cv.ShowImage(

'

iPrewittSharp

'

,iPrewittSharp)

cv.ShowImage(

'

iSobelSharp

'

,iSobelSharp)

cv.ShowImage(

'

iIsotropicSharp

'

,iIsotropicSharp)

cv.WaitKey(0)

看看运行效果吧

好吧,这三个图的运算花了好几秒的时间,循环太多了,其实可以用numpy做矩阵运算

我们在这里主要学习图像处理原理,不是学习编程

(3)拉普拉斯运算

拉普拉斯运算比较适合于改善因为光线的漫反射而造成的图像模糊,拉普拉斯算子法是常用的边缘增强处理算子

它是各向同性的二阶导数

对于连续二元函数有:

整理后有:

可以得到拉普拉斯算子模板:

看看运行效果

而对于Photoshop这类软件来说,锐化和我这里所说的锐化不同

它是在原图基础上,加强边缘效果

我们只要把模板适当改动就能实现这样的效果

还有一种思路,我们在前面讲了图像的平滑,我们用原图减去平滑后的图像

得到的就是锐化边缘了

第四幅图我们对轮廓线做了对数灰度变换,前面讲过的

不过,效果没有前面直接锐化清晰

我们还可以在原图上乘以一个大于1的因子再减去模糊后的图像

得到如下结果

好啦,图像空域的锐化处理就讲到这里啦,是不是很简单呢?

python图像边缘检测_python 简单图像处理(11) 空间域图像锐化(边缘检测)相关推荐

  1. python灰度处理_python 简单图像处理(9) 灰度变换

    对这个工具,你一定很熟悉吧,Photoshop里有,很多简单的图像处理软件里面也会有 那这个工具到底是什么意思呢,它和我们要讲到的灰度变换有很大的关系 在图像处理中,像图像度变换和直方图均衡都属于点运 ...

  2. python灰度处理_python 简单图像处理(14) 灰度图腐蚀和膨胀,开运算、闭运算...

    在前面,我们讲了二值图的腐蚀和膨胀运算 其实我们很容易把腐蚀和膨胀的概念扩展到灰度图上面去 在讲二值图时,我们把粗框区域作为黑色区域 而对于灰度图,我们把粗框区作为整个图形区域 对于图形中的任一点,以 ...

  3. 【youcans 的 OpenCV 学习课】7. 空间域图像滤波

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 [youcans 的 OpenCV 学习课]7. 空间域图像滤波 图像滤波是在尽可能保留图像 ...

  4. python 查看当前目录_Python的武器库11:os模块

    说到编程语言python,有一个著名的格言"余生太短,只用python".如果要分析为什么会存在这么一句格言?python的语法并不简单,有复杂难懂的部分,之所以又这样一句格言,是 ...

  5. pythonopencv图像形态_Python+OpenCV图像处理之其他形态学操作

    顶帽(Top Hat): 原图像与开操作之间的差值图像,突出原图像中比周围亮的区域 黑帽(Black Hat): 闭操作图像与原图像的差值图像, 突出原图像中比周围暗的区域 形态学梯度(Gradien ...

  6. 图像处理基础——空间域处理之灰度变换

    参考 http://www.pianshen.com/article/2960258309/ https://blog.csdn.net/zhangqixiang5449/article/detail ...

  7. python图像对比_Python多种图像处理库的比较与比较

    我帮助在libvips wiki 上维护一个页面,比较20个左右的常用图像处理库,以便快速和内存使用,包括相当多的Python系统. 基准测试非常简单:加载5,000 x 5,000像素RGB TIF ...

  8. python数字图像处理怎么保存图像_python数字图像处理(五) 图像的退化和复原...

    import cv2 import numpy as np import matplotlib.pyplot as plt import scipy import scipy.stats %matpl ...

  9. python图像分析_python数字图像处理(一)图像的常见操作

    首先导入必要的库,使用Opencv读入图像,避免复杂的图像解析,同时使用Opencv作为算法的对比,由于使用环境为jupyter使用matplotlib直接可视化 import cv2 import ...

  10. python宇晨_Python 学习第11天 yield 和异常处理

    主要功能:把一个函数变成生成器 复习:将列表变成生成器a=iter([i for i in range(10)]) a.next() 使用yield将函数变成生成器,保存函数执行状态 yield简单代 ...

最新文章

  1. [密码学] 复杂性理论基础
  2. Visual C++——Visual C++ 6.0 转 Visual Studio[Visual C++]编译错误[错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容]解决方案
  3. java.security.InvalidKeyException: Illegal key size
  4. oracle 10g rac 包root.sh报错,案例:Oracle Rac root.sh报错 Failed to create keys in the OLR
  5. vs code 插件 简繁转换_18个vscode插件打造python的超级IDE
  6. LeetCode 542. 01 Matrix
  7. android 文本分页显示,Android查看带有列表视图的分页器并动态添加文本
  8. Python使用python-snap7实现西门子PLC通讯
  9. linux mint 中文字体,Linux Mint字体设置
  10. axure rp9安装教程,axurerp9安装步骤
  11. 在web项目中使用Nginx搭建静态资源服务器,展示静态资源
  12. kvaser在linux中的应用
  13. 游戏开发unity资源管理系列:查看AssetBundle的工具-AssetStudio
  14. OLLYDBG逆天 往事随风修改专版
  15. 使用Java实现的高精度科学计算器
  16. 联通速品简易测试报告
  17. PC端浏览器自动填充账号密码输入框问题该如何解决?
  18. 【感悟随笔】我只是一直很努力
  19. Codeforces Round #643 (Div. 2) C. Count Triangles 题解(思维)
  20. Typora 未保存文件找回

热门文章

  1. 马化腾:如果今天我才创业 会做什么切入中国互联网
  2. Linux 防火墙配置
  3. 要了解CommunityServer的架构不得不看的文章
  4. VS2010与.NET4系列 19.ASP.NET4中新的HTML编码的%: %语法
  5. Java面向对象-String类
  6. SharePoint读取和设置列表栏的内容
  7. 牛顿法为什么比梯度下降法求解需要的迭代次数更少?
  8. 孙鑫VC学习笔记:第二十讲 (二) ado数据库编程
  9. php中怎样阻止网页进行跳转,PHP中阻止网页进行跳转的方法
  10. 拓端tecdat|在Python中自然语言处理生成词云WordCloud