删除图片中背景网格的优雅方法

时间:2019-04-15 11:52:04

标签: python computer-vision

从实验图片中,我想检索被调查对象的最大尺寸。该对象位于金属网格上,其灰度值与该对象的灰度值相似。

https://imgur.com/coP8D9E

鉴于像素值的相似性,我假设可以通过考虑两个特征来区分对象与网格:分割区域的大小(使用Otsu的阈值进行简化),以及特征的方向,即霍夫线变换-还是在特征定向的频域中?

我发现第一个比第二个要容易得多,因此我使用二进制关闭和打开来删除小的特征。这似乎工作得很好,这是我的代码:

import skimage.io as io
img = io.imread("image.JPG")

import cv2
from skimage.filters import threshold_otsu
from skimage.morphology import disk, binary_closing, binary_opening, remove_small_objects, convex_hull_image
from skimage.measure import label, regionprops

def extract_sample_length(img):
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray,(1,1),1000)

    seg = ~(blur > threshold_otsu(blur))

    selem_remove_grid = disk(8)
    mask = convex_hull_image(binary_closing(remove_small_objects(binary_opening(seg, selem_remove_grid), 500), selem_remove_grid))

    label_img = label(mask)
    regions = regionprops(label_img)
    return regions[0].major_axis_length

但是,我希望这些形态操作会影响主要对象的形状,从而可能给对象的尺寸带来不正确的估计,并且我认为我的方法确实缺乏美观。不幸的是,我无法通过其他方式去除金属网格。.有人对此有一个明智的解决方案吗?

“掩码”如下所示:https://imgur.com/R01xgmd

0 个答案:

没有答案