# 图像去除栏杆
## 一、问题分析
图像中的栏杆会对我们期望的目标进行遮挡,为了更加直观的看到目标物体需要去除栏杆。这个问题可以分为两个步骤来进行:
步骤一:识别栏杆区域
步骤二:将栏杆区域作为蒙板,进行图像修补
## 二、识别栅栏区域
### 2.1 直线特征
#### 2.1.1 边缘检测
用 Canny 边缘检测、Laplacian 算子边缘检测、Sobel 算子边缘检测三种方法对图片的边缘进行检测,可以看出 Canny 边缘检测方法检测出的边缘更加精细,其中栅栏的边缘也比较明显,所以选用 Canny 边缘检测的方法。
![](https://www.writebug.com/myres/static/uploads/2021/11/17/60cf0f0ed59026788df5a7fe8693aad3.writebug)
Canny 边缘检测
#### 2.1.2 直线检测
因为栅栏的边界大多为直线,所以采用霍夫变换的方法(Hough Transform)方法在 2.1 的基础上检测图中的直线。如图所示,包括栅栏的直线以及非栅栏直线,同时由于相机的畸变,存在部分栅栏的边界没有检测为直线,或者同一栅栏边界检测出多条直线。
![](https://www.writebug.com/myres/static/uploads/2021/11/17/9bc2c611c3e0ad38197bd990f8cd7ac5.writebug)
直线检测结果
#### 2.1.3 找栅栏斜率
利用统计学方法找出直线的斜率。统计 2.1.2 中检测到的直线的斜率,做一个简单的聚类找到出现次数最多的一个或两个斜率就是栅栏的斜率。
![](https://www.writebug.com/myres/static/uploads/2021/11/17/791a098c60a96879a4953ca8b01f4c05.writebug)
#### 2.1.4 找到栅栏的粗略范围
根据检测出的栅栏的斜率,筛选出栅栏边界的直线,画出来栅栏的大致范围如图所示。
![](https://www.writebug.com/myres/static/uploads/2021/11/17/8c2a8f388f0476c6a4318ae241aa94c3.writebug)
栅栏粗略范围
### 2.2 颜色特征
#### 2.2.1 标注栅栏样本点
在原始图片上标注 n 个样本点,样本点最好能代表栅栏的颜色分布。
![](https://www.writebug.com/myres/static/uploads/2021/11/17/d621fe4ca3a04d8be0ef8bf485c62d0f.writebug)
#### 2.2.2 根据样本找栅栏像素
选取标注的像素点和标注点周围若干个像素点作为栅栏样本,计算栅栏样本像素 RGB 值的均值和协方差,计算图片上所有像素与栅栏样本像素的马氏距离,距离近的粗略识别为栅栏。
![](https://www.writebug.com/myres/static/uploads/2021/11/17/2590b11786d7ea71f3e5283207478760.writebug)
#### 2.2.3 膨胀处理后 找栅栏区域
对栅栏区域做膨胀处理
去除面积特别小的联通区域,栅栏区域一般较大,面积小的栅栏区域应该是错误识别的地方。
![](https://www.writebug.com/myres/static/uploads/2021/11/17/fcf85d3c0eee2fe8fd72bb01bc4ab3c0.writebug)![](https://www.writebug.com/myres/static/uploads/2021/11/17/3362a9e6a61c108e93e29097cc12b77e.writebug)
#### 2.2.4 再次膨胀处理
![](https://www.writebug.com/myres/static/uploads/2021/11/17/1914a59c549edcc2d0c249b079ed94c5.writebug)
### 2.3 两特征融合
![](https://www.writebug.com/myres/static/uploads/2021/11/17/0be9d796134c40094d9475c42c9895ab.writebug) ![](https://www.writebug.com/myres/static/uploads/2021/11/17/de8e2c583e7867ed639ab86147242a93.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/17/d5c8df63a355d3d2f1bb4235e227d6f6.writebug)
## 三、修复图片
将栅栏区域作为蒙板,进行图像修补。
方法一:
使用 opencv 自带的修补函数 inpaint,其中参数 flags 可以选择为 INPAINT_NS 或 INPAINT_TELEA,分别对应基于纳维尔-斯托克斯方程的修补方法和 elea 在 2004 年提出的基于快速行进的修复算法。
参考:[https://wenku.baidu.com/view/97679916e87101f69e319536.html](https://wenku.baidu.com/view/97679916e87101f69e319536.html)
https://blog.csdn.net/carson2005/article/details/6844025
![](https://www.writebug.com/myres/static/uploads/2021/11/17/0ffb159eb96e65ace22be489645f25c4.writebug)
方法二:
[https://github.com/JiahuiYu/generative_inpainting](https://github.com/JiahuiYu/generative_inpainting)
### 依赖库
* opencv
* numpy
* matplotlib
* scikit-image
### 文件说明
* 实现说明.docx
简要说明实现过程
* color_feature(file)
通过栅栏颜色特征找栅栏范围
* line_feature(file)
通过栅栏边界的直线特征找栅栏范围
* de_fencing(file)
* Parameter.py
设定参数
* Setting.py
修改输入图片位置、输出图片位置等
* main1.py
利用颜色特征检测栅栏
* main2.py
利用直线特征和颜色特征检测栅栏
* EvaluateResult.py
评估检测效果并进行修补
* test(file)
原始图片和标准栅栏掩膜图片呢位置
* result(file)
检测结果、修复结果存储位置
### 运行方法
运行文件夹 `de_fencing` 中的 `main1.py` 和 `main2.py` 可以直接运行,检测栅栏区域,可以通过更改 `Setting.py` 程序中的图片位置来测试不同的图片。
`EvaluateResult.py` 可以直接运行,用于评估检测效果并进行图像修补
### 原理
具体见小论文
### 测试报告
![](https://www.writebug.com/myres/static/uploads/2021/11/17/b62216d9fc85d09836d77fa90d877f5d.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/17/b3000942140e7b40711f43373ca3e568.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/17/93f6e8d5f36f49c975f1714b21450ac0.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/17/82cacd83211f9cf7e1fd25bc16430109.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/17/45dabeaaa2be36deb3b75a441ec7f985.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/17/a1690046fae8a9ef4939b7055d0236af.writebug)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
用 Canny 边缘检测的方法对图片的边缘进行检测,采用霍夫变换的方法(Hough Transform)方法在基础上检测图中的直线,利用统计学方法找出直线的斜率将栅栏区域作为蒙板,进行图像修补。
资源推荐
资源详情
资源评论
收起资源包目录
100012536-基于Python实现图像去除栏杆.zip (87个子文件)
defence
LICENSE 1KB
测试报告
测试报告forshow-1.jpg 224KB
测试报告forshow-3.jpg 252KB
测试报告forshow-6.jpg 155KB
测试报告forshow-5.jpg 216KB
测试报告forshow-2.jpg 267KB
测试报告forshow-4.jpg 271KB
.idea
Remove_Fence.iml 317B
vcs.xml 235B
workspace.xml 57KB
misc.xml 288B
modules.xml 276B
encodings.xml 191B
line_feature
Canny.py 421B
HoughLinesP.py 877B
FindMaskThroughLine.py 6KB
__pycache__
FindMaskThroughLine.cpython-36.pyc 5KB
HoughLinesP.cpython-36.pyc 914B
de_fencing
Setting.py 2KB
main2.py 1KB
EvaluateResult.py 3KB
Parameter.py 320B
main1.py 833B
__pycache__
Setting.cpython-36.pyc 2KB
EvaluateResult.cpython-36.pyc 1KB
Parameter.cpython-36.pyc 380B
test
person.jpg 186KB
flower.jpg 97KB
dog.jpg 98KB
monkey.jpg 122KB
person_mask.png 6KB
dog_mask.png 12KB
bear.jpg 62KB
bear_mask.png 17KB
monkey_mask.png 35KB
flower_mask.png 9KB
color_feature
__init__.py 0B
FenceDetcc.py 5KB
FindMaskThroughColor.py 3KB
GetPoint.py 2KB
__pycache__
FindMaskThroughColor.cpython-36.pyc 2KB
FenceDetcc.cpython-36.pyc 3KB
__init__.cpython-36.pyc 153B
GetPoint.cpython-36.pyc 2KB
实现说明.docx 955KB
README.md 6KB
result
dog
data.txt 34B
masked.jpg 68KB
original.jpg 53KB
standard_mask.jpg 52KB
mask_compare.jpg 70KB
own_mask.jpg 59KB
inpainting_with_standard_mask.jpg 34KB
inpainting_with_own_mask.jpg 34KB
person
data.txt 34B
masked.jpg 174KB
original.jpg 186KB
standard_mask.jpg 30KB
mask_compare.jpg 51KB
own_mask.jpg 36KB
inpainting_with_standard_mask.jpg 171KB
inpainting_with_own_mask.jpg 172KB
flower
data.txt 34B
masked.jpg 87KB
original.jpg 84KB
standard_mask.jpg 27KB
mask_compare.jpg 40KB
own_mask.jpg 24KB
inpainting_with_standard_mask.jpg 78KB
inpainting_with_own_mask.jpg 76KB
monkey
data.txt 34B
masked.jpg 193KB
original.jpg 179KB
standard_mask.jpg 150KB
mask_compare.jpg 258KB
own_mask.jpg 48KB
inpainting_with_standard_mask.jpg 144KB
inpainting_with_own_mask.jpg 148KB
bear
data.txt 34B
masked.jpg 59KB
original.jpg 62KB
standard_mask.jpg 30KB
mask_compare.jpg 57KB
own_mask.jpg 37KB
inpainting_with_standard_mask.jpg 49KB
inpainting_with_own_mask.jpg 48KB
standard_mask.png 17KB
共 87 条
- 1
资源评论
- m0_750094792023-12-24这个资源值得下载,资源内容详细全面,与描述一致,受益匪浅。
神仙别闹
- 粉丝: 2681
- 资源: 7668
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Picasso_v3.1 2.ipa
- chromedriver-mac-arm64.zip
- 蓝zapro.apk
- chromedriver-linux64.zip
- UCAS研一深度学习实验-MNIST手写数字识别python源码+详细注释(高分项目)
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- 基于SVM多特征融合的微表情识别python源码+项目说明+详细注释(高分课程设计)
- html动态爱心代码一(附源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功