搜索
bottom↓
回复: 20

如何检测图片中的暗斑?

[复制链接]

出0入0汤圆

发表于 2016-11-27 09:58:56 | 显示全部楼层 |阅读模式
如下图,如何检测图片中的暗影?

从灰度图来看,灰度相差不大,只是灰度值稍为低一点的像素,集中在某个区域,形成了人眼能看到暗斑。

谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-11-27 10:06:00 | 显示全部楼层
对比度增强--->求亮度平均值--->以亮度平均值为参考进行二值化

出0入0汤圆

 楼主| 发表于 2016-11-27 10:08:22 | 显示全部楼层
FPGA_WALKER 发表于 2016-11-27 10:06
对比度增强--->求亮度平均值--->以亮度平均值为参考进行二值化

不行啊,四角的灰度值,比暗斑的灰度值还低。

这样做二值化,四个角本来不是暗斑的,也会二值化成暗斑的。

出0入0汤圆

发表于 2016-11-27 10:14:34 | 显示全部楼层
mzyes 发表于 2016-11-27 10:08
不行啊,四角的灰度值,比暗斑的灰度值还低。

这样做二值化,四个角本来不是暗斑的,也会二值化成暗斑的 ...

那就对比度增强---->锐化---->边缘检测,如果类似圆形的闭合图形,就是暗斑了。

出0入0汤圆

发表于 2016-11-27 11:32:38 | 显示全部楼层
黑斑或者白斑就是曲面上的一个洞(峰),检测梯度变化就可以了

出0入0汤圆

发表于 2016-11-27 16:11:36 | 显示全部楼层
把整体平均值算出来,再以一个比平均值稍低的值作为比较值去比较.

出0入0汤圆

发表于 2016-11-27 20:13:39 来自手机 | 显示全部楼层
一阶滤波应该可以出来的

出0入0汤圆

发表于 2016-11-27 20:15:52 来自手机 | 显示全部楼层
如果还不行可以二阶滤波不过好像阶数不能太多否则精度降低了

出0入0汤圆

发表于 2016-11-27 20:17:16 来自手机 | 显示全部楼层
滤波后可以去边,然后求平均值,加权应该可以出来了

出0入0汤圆

发表于 2016-11-27 20:25:13 来自手机 | 显示全部楼层
二值化之后画成圈圈再求圆心位置?

出0入0汤圆

 楼主| 发表于 2016-11-27 21:46:59 | 显示全部楼层
谢谢。因为光照不均匀、四角有暗角等问题,我尝试了很多二值化的算法,包括全局、局部等算法,效果都不理想。

出0入264汤圆

发表于 2016-11-27 22:22:38 | 显示全部楼层
两个问题:
1:究竟是想检测出缺陷,还是说要检测出缺陷,并且这个缺陷的形状也要判断?
2:用来检测什么?这个暗斑与周围的像素灰度值差了多少?

出0入0汤圆

 楼主| 发表于 2016-11-27 23:23:08 | 显示全部楼层
mcu_lover 发表于 2016-11-27 22:22
两个问题:
1:究竟是想检测出缺陷,还是说要检测出缺陷,并且这个缺陷的形状也要判断?
2:用来检测什么? ...

1、只检测出有这个缺陷,不判断形状。

2、这个暗斑与周围的像素灰度值差了多少才算是暗斑,这个阀值要求是我们可以调的。

出0入264汤圆

发表于 2016-11-28 07:50:58 | 显示全部楼层
那就应该可以检出了。之前做AOI时候,灰度值差异在3以上,基本都可以很可靠的检出。主要是要逐个像素点之间进行比较。不能用统一的灰度值二值化后去检测,这样的检测率很低。

出0入0汤圆

 楼主| 发表于 2016-11-28 08:52:44 | 显示全部楼层
mcu_lover 发表于 2016-11-28 07:50
那就应该可以检出了。之前做AOI时候,灰度值差异在3以上,基本都可以很可靠的检出。主要是要逐个像素点之间 ...

请教一下,逐个像素点之间进行比较,那用什么现有的算法的?因为我看了边缘检测的算法,好像是类似这样的的算法。

我使用边缘检测,效果也不是很理想,主要是原图没有经过处理,直接边缘检测,非暗斑的地方,梯度也很大,也就是边缘检测算法的阈值好像也不好调。

出0入0汤圆

发表于 2016-11-28 09:15:12 | 显示全部楼层
本帖最后由 binaimei2007 于 2016-11-28 09:17 编辑

简单的做一下,用傅里叶变换到频域,再滤波,然后将4边的一定区域去除,选取灰度值在一定范围内的图像,结果如下,不知道通用性如何:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-11-28 11:15:40 | 显示全部楼层
本帖最后由 huangguimina4 于 2016-11-28 11:25 编辑

楼主可否这样搞一下:使用模版的方法去检测?使用二值化后的一个标准没问题的模版图形与被检测的图形相减。

  1.    
  2. Mat img1 = imread("/Users/guiminhuang/Downloads/test.jpg");     //被检测图形
  3. Mat img2 = imread("/Users/guiminhuang/Downloads/Standard.jpg");//模版图形

  4. cvtColor( img1, img1, CV_BGR2GRAY );
  5. cvtColor( img2, img2, CV_BGR2GRAY );
  6. subtract(img2, img1, img1);

  7. threshold(img1,img1,value,255,CV_THRESH_BINARY);
  8. imshow("test1",img1);
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-11-28 13:31:59 | 显示全部楼层
binaimei2007 发表于 2016-11-28 09:15
简单的做一下,用傅里叶变换到频域,再滤波,然后将4边的一定区域去除,选取灰度值在一定范围内的图像,结 ...

你这效率高,用的matlab吗?

出0入264汤圆

发表于 2016-11-27 09:58:57 | 显示全部楼层
单个点比较的话,就是一个点与周围一定距离的8个点灰度值进行比较。如果这个点与周围点差异比较大,则标记为特征点,记录坐标。所有点处理完成后,根据这些点的这些坐标生成一副二值化后的图像。再对这个图像进行轮廓查找即可。  
上面提及的相减办法也是可以的。不过要先对图像滤波处理后,然后动态生成模板图像,然后两幅图像相减,最后得到差异图像。然后对比度提升之后,直接二值化就可以了。具体效果要自己去试一下。

出0入0汤圆

 楼主| 发表于 2016-11-28 22:54:39 | 显示全部楼层
感谢以上朋友的热心回复,谢谢。

我已经看到别人的实现方法,不知用的是opencv还是halcon,因为中间亮四角暗,所以采用了如下图的辐射方式,应该是分区计算了,我看了演示,非常准确地把暗斑找出来并用红框标示出来了:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入71汤圆

发表于 2016-11-29 08:26:29 | 显示全部楼层
本帖最后由 dellric 于 2016-11-29 08:27 编辑







算法:先大范围模糊,然后用原图减当前图
用VB写了一个程序,可以把参数调调,楼主试试,看能否帮到你

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 19:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表