【问题标题】:splitting an image into Spokes and calculate number of black pixels in each spoke将图像分割成辐条并计算每个辐条中黑色像素的数量
【发布时间】:2018-12-13 19:21:29
【问题描述】:

在 python 中,我试图将图像分成辐条并计算每个辐条中黑色像素的数量。最终目标是生成图像的天空视图因子,但对于分离成辐条(围绕图像中心的圆形三角形)的任何帮助将不胜感激。

例如,我有一张用鱼眼镜头拍摄的半球形图像(下面绘制的示例),我想将圆形图像分成围绕中心的三角形(如轮子中的辐条或披萨片)

circle divided into triangles like pizza slices or spokes around a wheel

圆圈可能并不总是在图像上的同一位置,并且最初不会被分成几条线,因为它是天空的半球形图像。因此,作为示例图像将看起来更像这样:

example of image with no division lines

无论圆圈在哪里,我都需要相同数量的线段,例如 8

【问题讨论】:

  • 请问什么是Spoke?你有图片要分享吗?这里的输入和输出是什么?请确保有足够的信息让他人为您提供帮助。谢谢。
  • 感谢您的反馈。我更新了这个问题,辐条是圆形的三角形部分,例如披萨片或轮辐
  • 请问您还有更多图片吗?例如,圆圈是否总是在同一个地方并具有相同的段数?
  • 如果你修剪掉黑色像素(见codereview.stackexchange.com/a/132934)你会得到一个正方形。中心的半径和坐标是修剪后图像宽度的一半。现在使用 PIl (Pillow - pillow.readthedocs.io/en/5.2.x/releasenotes/… ) 画一条弧线并屏蔽掉所有你不感兴趣的东西。
  • 谢谢!会试试的

标签: python image-processing


【解决方案1】:

我没有时间像往常那样做一个完整的答案,但我想贡献一些零碎的东西,而且没人说答案需要完整。

第 1 步 - 修剪黑色以找到半径

你可以剪掉黑色像素,得到一个正方形,中间有你想要的圆圈。您可以使用numpy 来检查图像/ndarray 的行/列中的所有元素是否为零,然后将它们切掉。

或者你可以使用this method

一旦你有了一个正方形,如果你取它的一半宽度,你就会知道你的圆的半径和中心坐标。

第 2 步 - 生成蒙版

绘制饼图来遮盖您想要的像素。我在这里画了 3 个切片来演示如何绕着圆圈移动,但您一次只需要一个。

这里有一些代码可以绘制前几个饼图,可以用来遮盖你想要的部分:

#!/usr/local/bin/python3

import PIL.ImageDraw as ImageDraw,PIL.Image as Image, PIL.ImageShow as ImageShow 

im = Image.new("RGB", (400,400))
draw = ImageDraw.Draw(im)

sectors=8
angle=360/sectors

# Draw first sector bright white - fill colour is rgb(255,255,255)
startangle=-90
draw.pieslice((0,0,400,400),startangle,startangle+angle,fill=(255,255,255))

# Draw second sector slightly darker
startangle+=angle
draw.pieslice((0,0,400,400),startangle,startangle+angle,fill=(223,223,223))

# Draw third sector slightly darker still
startangle+=angle
draw.pieslice((0,0,400,400),startangle,startangle+angle,fill=(192,192,192))

im.show()

显然,在您完成的代码中,这一步将是对所有八个切片的for 循环的开始,您一次只做一个切片。

第 3 步 - 敷面膜

因此,如果您现在拍摄这样的蒙版图像:

并反转(否定)它,然后将其覆盖到您的原件上,在每个像素位置选择两个图像中较亮的一个,您会得到这个(我之后人为添加了一个黑色边框,以便您可以看到它的范围:

您可以使用numpy.maximum() 选择较亮的像素,如图here

第 4 步 - 计算所需像素

您现在有望计算黑色(即零值)像素或白色像素,然后从整个形状的面积中减去。

This link 显示了一种方法。还有其他的。

【讨论】:

猜你喜欢
  • 2017-10-06
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
相关资源
最近更新 更多