参考链接:http://t.csdnimg.cn/D2b6U
先介绍一下本文的例子,要提取一张图片中的目标区域,但是目标一半亮一半暗有阴影,影响对有效区域的提取。
考虑到可以先做暗部提亮,再做接下来的处理。
如果直接做阈值,可能很难选中合适的阈值或范围:
下面是直接对原图做阈值的效果:
因为需要做区域提取,所以下面先选取ROI区域(手动选择ROI:http://t.csdnimg.cn/Ut12m),
只需要暗部提亮的可以省略前面步骤。
read_image (Image, 'D:/APP/Imgs_project/dogdi.jpg')
* rgb1_to_gray (Image, Image)
*这里是通过ImageJ打开图片读取的坐标信息
*不直接输入坐标,也可以通过代码手动绘制ROI区域
gen_rectangle1 (Rectangle1, 440, 518, 670, 838)
reduce_domain (Image, Rectangle1, ImageReduced2)
get_image_size (ImageReduced2, Width, Height)
dev_open_window_fit_image (ImageReduced2, 0, 0, -1, -1, WindowHandle)
decompose3(ImageReduced2, image_R, image_G, image_B)
* 直方图均衡化
equ_histo_image (image_B, ImageEquHisto3)
*均值滤波
mean_image (ImageEquHisto3, ImageMean, 3, 3)
上文中B通道的效果比较好,就选择了B的单通道图。可以根据自己图像特征选择合适的单通道图继续处理,或者先处理再合并通道图再做灰度化,一边观察效果一边调节,步骤因图而异,不是必要的:
* 高斯滤波处理
gauss_filter (image_R, ImageGauss, 5)
* 增强图像对比度
scale_image_max (ImageGauss, ImageScaleMax)
* 增强图像算子emphasize或illuminate
*emphasize (ImageGauss, em1, 5, 5, 1.5)
illuminate (ImageScaleMax, ImageI1, 20, 20, 0.55)
* 直方图均衡化
equ_histo_image (image_G, ImageEquHisto2)
equ_histo_image (image_B, ImageEquHisto3)
* 通道合并
compose3 (ImageI1, ImageEquHisto2, ImageEquHisto3, MultiChannelImage)
下面是分离处理的B通道图做直方图均衡化后的效果图ImageEquHisto3。
此时目标所在区域灰度比原图均匀,可以进行下一步提取区域,这里是第一种方法。
*1.全局阈值
threshold(ImageMean,Region,128,255)
fill_up(Region,RegionFillUp1)
connection (RegionFillUp1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions, 'area', 'and', 300, 99999)
union1 (SelectedRegions, RegionUnion1)
这里直接阈值分割出区域,阈值范围可以自行调节,效果如下:
第二种方法,这里是使用阈值提取轮廓再筛选,转成区域
*2.选取阈值作为分界线
threshold_sub_pix (ImageMean, Border, 165)
select_shape_xld (Border, SelectedXLD, 'contlength', 'and', 10, 2000)
gen_region_contour_xld (SelectedXLD, Region, 'filled')
select_shape (Region, Selecteddog, 'area', 'and', 150, 99999)
union1 (Selecteddog, RegionUnion)
效果如下:
还有动态阈值的,具体过程遇到有些瓶颈,有提取区域处理过程比较顺利的可以互相沟通。
*3.动态阈值
dyn_threshold (ImageEquHisto3, ImageMean, RegionDynThresh, 20, 'light')
fill_up (RegionDynThresh, RegionFillUp2)
connection (RegionFillUp2, ConnectedRegions2)
*这里只是很散乱不连接的小点区域,尝试把区域连接但是很容易得到黑白图。这里无论是提取暗 区还是亮区,它基本上得到的都是背景的区域,尝试做了反选和相减,但是由于这些区域不连通很小很 分散所以还是难提取。
*暂时没有想到直接用动态阈值提取目标区域的后续过程,
*查阅文章有先全局再动态的过程但觉得太繁琐,我这个处理需求只是为了提取目标区域求最小外接矩形的中心,不需要这么多步骤
目前只能做到这边,不想思考了,知识储备比较充足的可以提点关于后面怎么提取目标区域的建议步骤:
生活真是心累,下班,结束。