# create set of sample image and plot them
image = PIL.Image.open("14767594_in.png")
image_data = np.asarray(image)
image_data_blue = image_data[:,:,2]
median_blue = np.median(image_data_blue)
sample_images = create_sample_set(image_data_blue>median_blue)
plt.figure(1)
for i in range(36):
plt.subplot(6,6,i+1)
plt.imshow(sample_images[i,...])
plt.axis("off")
plt.subplots_adjust(0,0,1,1,0,0)
# determine per-pixel variablility, std() over all images
variability = sample_images.std(axis=0).sum(axis=2)
# show image of these variabilities
plt.figure(2)
plt.imshow(variability, cmap=plt.cm.gray, interpolation="nearest", origin="lower")
当您将图像数据作为数组时,可以使用内置的numpy函数轻松快速地执行此操作:
会给你,第一张图片:
所以你想要的数据是:
(27, 78)
166 - 27 = 139
156 - 78 = 78
我选择了“蓝色值大于所有蓝色值中值的每个像素”属于您的对象。我希望这对你有用;如果不行,尝试其他方法或提供一些不起作用的例子。
编辑 我重新编写了代码,使其更通用。由于两幅图像的形状颜色相同,不够通用(如您的评论所示),我综合创建了更多的样本。
在这里,形状的颜色是可调的。对于N=26个图像中的每一个,选择随机的背景色。也可以在背景中加入噪声,这不会改变结果。
然后,我阅读了您的示例图像,从中创建一个形状遮罩,并使用它创建示例图像。我把它们画在网格上。
对于
shape_color
(参数到create_sample_set(...)
)的另一个值,可能如下所示:接下来,我将使用标准差来确定每像素的可变性。正如你所说,这个物体几乎在同一个位置上的所有图像上。因此,这些图像的变化率将很低,而对于其他像素,变化率将明显更高。
最后,像在我的第一个代码片段中一样,确定边界框。现在我也提供了一个情节。
就这样。我希望这次足够普遍了。
复制和粘贴的完整脚本:
我创建了第二个答案,而不是扩展我的第一个答案更多。我也用同样的方法,但你的新例子。唯一的区别是:我使用一组固定的阈值,而不是自动确定它。如果你能玩它,这就足够了。
生产地块:
你的要求与认知神经科学中的ERP密切相关。输入的图像越多,随着信噪比的增加,这种方法的效果越好。
相关问题 更多 >
编程相关推荐