英文:
How to generate mask fast where pixel is colorful rather than grayscale in SEM image?
问题
这是一张扫描电子显微镜(SEM)图像,上面添加了一些辅助特征线。我的目的是将它们移除。
我发现,对于原生SEM像素,RGB值应该是相同的或非常接近,而对于彩色线条/像素,RGB值可能会有很大的变化。
因此,我编写了一个函数来提取它们。
def filter_colorful_point(img_obj):
def check_point_is_colorful(rgb):
rgb = list(rgb)
if rgb.count(rgb[0]) == len(rgb):
return False
return max(rgb) - min(rgb) >= 30
colorful_mask = np.apply_along_axis(check_point_is_colorful, axis=2, arr=img_obj).astype('uint8')
return colorful_mask
在这里,我使用了NumPy中的apply_along_axis
方法,并比较了第三个轴中的值,即BGR值。
这个函数效果相当不错。下面是生成的掩码图像。
我的问题是,我如何优化这个函数以使其更快?因为我需要处理很多SEM图像。
英文:
Here is a SEM image, some asssist feature lines are added on it. My purpose is to remove them.
I found that, for native SEM pixel, RGB values should be all same or very close, for colorful lines/pixels RGB values may vary a lot.
So I write a function to extract them.
def filter_colorful_point(img_obj):
def check_point_is_colorful(rgb):
rgb = list(rgb)
if rgb.count(rgb[0]) == len(rgb):
return False
return max(rgb) - min(rgb) >= 30
colorful_mask = np.apply_along_axis(check_point_is_colorful, axis=2, arr=img_obj).astype('uint8')
return colorful_mask
Here I use apply_along_axis method in numpy and compare the values in third axis, which are BGR values.
And the function works pretty good. Here is the generated mask
My question is, how could I optimize this function to make it faster? Cause I have so many SEM image to process.
答案1
得分: 3
你可以使用 ptp(峰值到峰值):
colorful_mask = np.where(np.ptp(im, 2) >= 30, 1, 0)
或者更简单,如下评论所指出:
colorful_mask = (np.ptp(im, 2) >= 30).astype('uint8')
英文:
You can use ptp (peak to peak):
colorful_mask = np.where(np.ptp(im, 2) >= 30, 1, 0)
or even simpler as pointed out in the comment below:
colorful_mask = (np.ptp(im, 2) >= 30).astype('uint8')
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论