当前位置: 首页 > 知识库问答 >
问题:

图像到极坐标

羊舌庆
2023-03-14

我在将图像转换为极坐标时遇到问题。在Photoshop中很容易:)所以这对我来说是一个新领域。

我有以下图片:

结果应该是这样的:

我在这里看了一下,了解了一些基本知识,但仍然对圆的平方有点困惑:

import math
from PIL import Image, ImageDraw


# image size
imgX = 200
imgY = 200

image = Image.new("RGB", (imgX, imgY))
draw = ImageDraw.Draw(image)

#fill with white first
colour = "#ffffff"
box = [0,0, imgX, imgY]
image.paste(colour, box)

# draw line near base
draw.line((0,180, 200, 180), fill="#FF0000", width=2)

print "Line done!"
image.save("line.png", "PNG")

# there's got to be a way to get the current image
# without having to open it up again

im = Image.open("line.png")
rgb_im = im.convert("RGB")

# rectangle to polar coordinates
maxradius = math.sqrt(imgX**2 + imgY**2)/2
rscale = imgX / maxradius
tscale = imgY / (2*math.pi)

for y in range(0, imgY):
    dy = y - imgY/2

    for x in range(0, imgX):
        dx = x - imgX/2
        t = math.atan2(dy,dx)%(2*math.pi)
        r = math.sqrt(dx**2+dy**2)

        r, g, b = rgb_im.getpixel((x, y))
        # this is where it goes wrong
        col = b * 65536 + g * 256 + r
        image.putpixel((x, y), b * 65536 + g * 256 + r

image.save("polar.png", "PNG")

我几乎不知道如何重新绘制图像。还有一个警告:由于管理限制,我想避免使用像Numpy这样的外部库。

共有1个答案

万嘉石
2023-03-14

以下代码适用于我。主要变化:

>

对于圆形图像中的每个对应的x和y,t和r将为您提供要在线条图像中访问的图像坐标。它们已经存在了,您只需要有效地将它们用作索引来获取像素颜色。

将rscale和tscale应用于r和t,使2×pi对应于图像的右边缘。您肯定需要更改r的这个比例,以便能够在输出中看到这个圆,或者将线向上画得更靠近顶部(例如,在第100行而不是180行)。

我还包括了一个线条图像访问的边界检查。

```

import math
from PIL import Image, ImageDraw     
# image size
imgX = 200
imgY = 200

line_image = Image.new("RGB", (imgX, imgY))
draw = ImageDraw.Draw(line_image)

#fill with white first
colour = "#ffffff"
box = [0,0, imgX, imgY]
line_image.paste(colour, box)

# draw line near base
draw.line((0,180, 200, 180), fill="#FF0000", width=2)

print "Line done!"
line_image.save("line.png", "PNG")

circle_image = Image.new("RGB", (imgX, imgY))

# rectangle to polar coordinates
maxradius = math.sqrt(imgX**2 + imgY**2)/2
rscale = imgX / maxradius
tscale = imgY / (2*math.pi)

for y in range(0, imgY):
    dy = y - imgY/2

    for x in range(0, imgX):
        dx = x - imgX/2
        t = math.atan2(dy,dx)%(2*math.pi)*tscale
        r = math.sqrt(dx**2+dy**2)*rscale

        if 0<= t < imgX and 0 <= r < imgY:
            r, g, b = line_image.getpixel((t, r))
            # this is where it goes wrong
            col = b * 65536 + g * 256 + r
            circle_image.putpixel((x, y), col)

circle_image.save("polar.png", "PNG")

```

 类似资料:
  • 我知道这个问题已经被回答了很多次,但是我不知道我做的是好是坏。 我得到了一个带有缺陷位置和图像ID的文件。图像大小为96*96。起源是(48,48) 由此计算R和T 然后,我为每个图像创建大小为96×96的空矩阵,对于图像1(例如),我在每个坐标(R,T)处赋值0 当我绘制矩阵时,我的结果很奇怪。。我错过了什么重要的事情吗?

  • 我想知道是否有人帮助我理解如何将顶部图像转换为底部图像。以下链接中提供了这些图像。顶部图像采用笛卡尔坐标。底部图像是极坐标中的转换图像

  • 我无法将[R,theta]格式的图像转换为[x,y] 我正在尝试使用interp2。 然后我会: 最后: 但图像不正确! 以下是输入图像(图1)(带R,θ几何): 我想在笛卡尔网格上重建它(使用interp2),所以它看起来像这样(图2): 极坐标图像(图1)中的所有数据应映射到笛卡尔图像的红色部分(图2)。

  • 好吧,这可能有点愚蠢,但我真的很难理解Matlab中的图像坐标。 所以,在一个数学方程中,f(x,y)f是图像函数,其中x和y是图像的坐标。例如,在matlab代码中,我们可以: 其中,img(1,4)等效于函数f(x,y)。现在,在Matlab中,有一个选项可以使用cart2pol()函数将笛卡尔坐标(x,y)转换为极坐标(rho,theta)。 现在,这就是我不明白的地方。是否可以应用f(ρ,

  • 我正在尝试将极坐标的图像转换为笛卡尔坐标。 将图像转换为极坐标的示例显式执行-想要一个光滑的矩阵方法 我原以为使用上述方法是小菜一碟,但事实并非如此!!如果有人发现我的代码有错误,请告诉我! 我发现非常奇怪的是,当我改变phi时,它会做出根本性的改变,而不是以我期望的方式! 干杯

  • 问题内容: 我有一组png图像,我想用Python和 相关工具。每个图像表示一个具有已知属性的物理对象 尺寸。 在每幅图像中,在某一特定位置都有一个特定的物体特征 像素/物理位置。每个图像的位置都不同。 我想在给定的图像上加一个极坐标系 此要素所在位置的原点。 然后我希望能够得到以下信息:-图像 强度作为给定极角径向位置的函数 图像强度作为径向位置的函数,当值在 所有极角。 我对Python编程和