图像分割简介

简介

计算机视觉的基本任务包括图像识别,物体检测,图像分割等。图像识别主要是对给定图像进行分类;物体检测需要将利用矩形框将图像中的物体标识出来;图像分割需要将图像中不同的像素点进行分类,与物体检测相比,图像分割更加细致,难度更大,FCN是利用机器学习的方法进行图像分割,但是图像分割还有其他不同的方法,这也是我在这篇博客里头要提到的。

基本方法

区域分割

区域分割一般是将图像中的物体与背景分割开。我们可以设定一个或多个阈值,将图片分为两个或多个部分。一般可以将阈值设定为图像像素的均值;或者使用选定起始点以后区域增长算法进行分割;再或者采用聚类的方式进行分割。

边缘分割

两个相邻区域之间会有边界,我们可以根据这个边界对图像进行分割。边缘检测一般采用矩阵算子进行卷积运算,比较常用的有sobel operator。

检测水平边缘采用水平sobel operator.


检测垂直边缘采用垂直sobel operator.


可以同时检测水平和垂直边缘的Laplace operator.


测试代码如下:

import matplotlib.pyplot as plt
% matplotlib inline
from scipy import ndimage
from skimage.color import rgb2gray
import numpy as np
img=plt.imread("test.jpg")
# plt.imshow(img)
print(img.shape)
grayimg=rgb2gray(img)
plt.imshow(grayimg,cmap='gray')
sobel_horizontal=np.array([[1,2,1],[0,0,0],[-1,-2,-1]])
sobel_vertical=np.array([[-1,0,1],[-2,0,2],[-1,0,1]])
laplace=np.array([[1,1,1],[1,-8,1],[1,1,1]])
sobel_h=ndimage.convolve(grayimg,sobel_horizontal,mode='reflect')
sobel_v=ndimage.convolve(grayimg,sobel_vertical,mode='reflect')
laplace_img=ndimage.convolve(grayimg,laplace,mode='reflect')
plt.imshow(sobel_h,cmap='gray')
plt.imshow(sobel_v,cmap='gray')
plt.imshow(laplace_img,cmap='gray')

以下是原图


以下是horizontal sobel operator处理后的图片


以下是vertical sobel operator处理过后的图片


以下是laplace operator处理后的图片


对于比较简单的图像,上述算子处理的效果还是很不错的。

基于深度学习的分割

基于深度学习的分割一般是采用CNN进行特征提取然后进行分割,主要有以下几种模型:

  •   R-CNN
  •   Fast R-CNN
  •   Faster R-CNN
  •   Mask R-CNN
  •   FCN

参考资料
Image segmentation:https://www.analyticsvidhya.com/blog/2019/04/introduction-image-segmenta...
Region based segmentation:https://pdfs.semanticscholar.org/b5ba/bd20d9409d3dfef8fc84c196fbeacc6162...

版权声明:本文为CSDN博主「Rauchy」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wc13197389627/article/details/100930850

最新文章