边缘检测和Otsu方法背景分割


代码主要内容为使用拉普拉斯算子和自适应高斯阈值作边缘检测;用Otsu方法作前后背景分割。
(1)拉普拉斯算子提取的边缘由于数据长度的关系,很多边缘在图中被忽略了;
(2)Canny算子因为提取的边缘断断续续,所以这里不再给出结果,一般用于图片中有大范围或明显的几何结构(比如道路检测)等场合中;
(3)自适应高斯提取边缘在不同的图像块内的阈值都不一样,所以对图片中不同的光照条件会有很好的适应;

(4)Otsu方法可用于提取前后背景,适用于有两个尖峰的灰度直方图的图片中(这样的图片前后背景乍看会分得很开)

import cv2
import math
import cv2.cv
import numpy as np
from matplotlib import pyplot as plt
################################################################################

print 'Load Image'

imgFile = 'images/big_alice.jpg'

# load an original image
img = cv2.imread(imgFile)
################################################################################

# color value range
cRange = 256

rows,cols,channels = img.shape

# convert color space from bgr to gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
################################################################################

# laplacian edge
imgLap = cv2.Laplacian(imgGray,cv2.CV_8U)

# otsu method
threshold,imgOtsu = cv2.threshold(imgGray,0,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# adaptive gaussian threshold  
imgAdapt = cv2.adaptiveThreshold(imgGray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
# imgAdapt = cv2.medianBlur(imgAdapt, 3)    
################################################################################

# display original image and gray image
plt.subplot(2,2,1), plt.imshow(img), plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2), plt.imshow(imgLap,cmap = 'gray'), plt.title('Laplacian Edge'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3), plt.imshow(imgOtsu,cmap = 'gray'), plt.title('Otsu Method'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4), plt.imshow(imgAdapt,cmap = 'gray'), plt.title('Adaptive Gaussian Threshold'), plt.xticks([]), plt.yticks([])
plt.show()                                                
################################################################################

print 'Goodbye!'

实现结果

        实现效果如下图所示,上一行的图片因为前景轮廓清晰和背景统一,所以可以发现所有方法都可以用。下一行图片背景复杂很多,对边缘提取影响不大,但Otsu方法的前后背景分割显然不可行,原因是背景的混乱导致在灰度直方图中的背景对应的灰度值投票过少,不足以形成尖峰使得前后背景分割的阈值刚好停留在尖峰的山脚附近。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值