基于python的砂轮图像处理
废话少说,直接上图,其中My method是我的处理效果,GT method是一个对比效果图,Source为原图,其他为处理过程中的一些图。
总体来说我的效果图中分部的边缘处理较好,第二张应该使用一定的膨胀,我觉得膨胀和腐蚀容易让边缘失真。仁者见仁智者见智吧。
没有很多的时间去进一步弄了,就这样吧。

接着是代码:
#----------------------------------- # 砂轮图像处理 # # 子倾 # 2012.12.30 # 主要思想:分割提取各个通道以及相关边缘的信息进行融合 #----------------------------------- # 导入相关库,类似于C中的include import skimage import skimage.morphology as sm import matplotlib.pyplot as plt from skimage import io,morphology,exposure,color,filters # 读取图片 img=io.imread('f:\source.jpg') #读入待处理图片 GTimg=io.imread('f:\GT.png') #理想效果图 hsv=color.convert_colorspace(img,'RGB','HSV') #将RGB图转为HVS空间表示 image = skimage.color.rgb2grey(img) #灰度化 image=exposure.equalize_hist(image) #亮度均衡化 #阈值处理,保留图片高亮部分,目的是获取高亮部分作为补偿,因为反光部分往往是我们需要的 dst_tt =morphology.closing(image < 0.95, morphology.square(2)) #处理掉高亮部分图中的部分小点,之所以要将图像取反,是因为下面的函数是针对连通白点区域处理的 dst_tt = ~dst_tt dst_tt=morphology.remove_small_objects(dst_tt,min_size=50,connectivity=1) dst_tt = ~dst_tt #阈值,去原图亮度较低部分。 dst_t =morphology.closing(image > 0.22, morphology.square(2)) dst = dst_t*0.5 + dst_tt*0.5 #叠加融合亮度高和亮度低的部分 #阈值,实际上这步就是将两个图像做或运算 dst_c =morphology.closing(dst > 0.5, morphology.square(2)) dst = dst_c #这一步的目的是改一下变量名而已,下面全局主要以dst为目标一直往下处理 #滤除一下不必要的黑色小块,这样的做法比中值滤波效果要好 dst = ~dst dst=morphology.remove_small_objects(dst,min_size=50,connectivity=1) dst = ~dst #---------------------------------------------------------------------- #取得hsv图像的s通道做融合处理 hsv_s = hsv[:,:,1] hsv_s =morphology.closing(hsv_s > 0.40, morphology.square(1)) #阈值 #去除白色小块 hsv_s=morphology.remove_small_objects(hsv_s,min_size=120,connectivity=1) hsv_s=~hsv_s #取反 dst = hsv_s*0.5+ dst*0.5 #叠加融合到前期处理的dst中 #阈值,这一步和上一步等于两个图像做或运算 dst =morphology.closing(dst > 0.5, morphology.square(2)) #填补白色的洞,或是说黑色包围的比区域,6000是面积参数 dst=morphology.remove_small_objects(dst,min_size=6000,connectivity=1) #----反向移除黑点---------------- dst = ~dst dst=morphology.remove_small_objects(dst,min_size=120,connectivity=1) dst = ~dst dst_temp = dst #临时保存当前成果 #---------------------------------------------------------------------- #下面就是提取hsv图像中的v通道的有用信息进行融合,具体操作和上面类似,不赘述 hsv_v= hsv[:,:,2] hsv_v =morphology.closing(hsv_v > 0.47, morphology.square(1)) #阈值 hsv_v = ~hsv_v hsv_v=morphology.remove_small_objects(hsv_v,min_size=400,connectivity=1) hsv_v = ~hsv_v hsv_v=sm.erosion(hsv_v,sm.square(2)) dst = hsv_v*0.5+ dst*0.5 #叠加融合 dst =morphology.closing(dst > 0.5, morphology.square(2)) dst=morphology.remove_small_objects(dst,min_size=600,connectivity=1) #————————————————————————————————————————————————————---------------- #这部分使用边缘信息来修复,我比较强调保持边缘的真实,所以我很少使用膨胀和腐蚀 edges = filters.sobel(dst)#获取边缘图 edges =morphology.closing(edges > 0.05, morphology.square(2))#适度阈值 dst = edges dst = ~dst #填充比区域 dst=morphology.remove_small_objects(dst,min_size=3000,connectivity=1) # 做融合 dst = dst*0.5+ dst_temp*0.5 dst =morphology.closing(dst > 0.5, morphology.square(2)) dst=morphology.remove_small_objects(dst,min_size=300,connectivity=4) dst=sm.dilation(dst,sm.square(2)) dst=sm.dilation(dst,sm.square(2)) #dst=sm.erosion(dst,sm.square(2)) dst_temp = dst edges = filters.sobel(dst) edges =morphology.closing(edges > 0.05, morphology.square(2)) #————————————————————————————————————————————————————------------------ plt.figure(num='Funny',figsize=(13,9)) plt.subplot(3,3,1) plt.title('My method') plt.imshow(dst,plt.cm.gray) plt.subplot(3,3,2) plt.title('GT method') plt.imshow(GTimg,plt.cm.gray) plt.subplot(3,3,3) plt.title('Source') plt.imshow(img) plt.subplot(3,3,4) plt.title('equalize_hist') plt.imshow(image,plt.cm.gray) #plt.subplot(3,3,5) #plt.title('threshold') #plt.imshow(dst_tt,plt.cm.gray) plt.subplot(3,3,5) plt.title('dst_c') plt.imshow(dst_c,plt.cm.gray) plt.subplot(3,3,6) plt.title('hsv') plt.imshow(hsv) plt.subplot(3,3,7) plt.title('hsv_v') plt.imshow(hsv_v,plt.cm.gray) plt.subplot(3,3,8) plt.title('hsv_s') plt.imshow(hsv_s,plt.cm.gray) #plt.subplot(3,3,9) #plt.title('hsv_v') #plt.imshow(hsv[:,:,2],plt.cm.gray) plt.subplot(3,3,9) plt.title('test') plt.imshow(~edges,plt.cm.gray) plt.show() dst = dst*0.9999 io.imsave('f:/Result.jpg', dst)
浙公网安备 33010602011771号