gpt4 book ai didi

python - 如何定位图像中亮点的中心?

转载 作者:太空狗 更新时间:2023-10-30 00:49:24 26 4
gpt4 key购买 nike

这是我将要处理的图像类型的示例:

Balls
(来源:csverma at pages.cs.wisc.edu)

每个球上都有一个亮点。我想定位亮点中心的坐标。我怎样才能在 Python 或 Matlab 中做到这一点?我现在遇到的问题是现场有多个点具有相同(或大致相同)的白色,但我需要的是找到这个白点“簇”的中心。

另外,对于最左边和最右边的图片,如何找到整个圆形物体的中心?

最佳答案

您可以简单地对图像设置阈值并找到剩余部分的平均坐标。当有多个值具有相同的强度时,这会处理这种情况。当你对图像进行阈值处理时,显然会有不止一个明亮的白色像素,所以如果你想把它们放在一起,找到质心或平均坐标来确定所有这些白色的中心明亮的像素。在这种特殊情况下不需要过滤。这是 MATLAB 中的一些东西。

我直接读取了该图像,将其转换为灰度并清除了每幅图像周围的白色边框。接下来,我将图像分成 5 个 block ,对图像进行阈值处理,找到剩余的平均坐标并在每个中心所在的位置放置一个点:

im = imread('http://pages.cs.wisc.edu/~csverma/CS766_09/Stereo/callight.jpg');
im = rgb2gray(im);
im = imclearborder(im);

%// Split up images and place into individual cells
split_point = floor(size(im,2) / 5);
images = mat2cell(im, size(im,1), split_point*ones(5,1));

%// Show image to place dots
imshow(im);
hold on;

%// For each image...
for idx = 1 : 5
%// Get image
img = images{idx};

%// Threshold
thresh = img > 200;

%// Find coordinates of thresholded image
[y,x] = find(thresh);

%// Find average
xmean = mean(x);
ymean = mean(y);

%// Place dot at centre
%// Make sure you offset by the right number of columns
plot(xmean + (idx-1)*split_point, ymean, 'r.', 'MarkerSize', 18);
end

我明白了:

enter image description here


如果您想要 Python 解决方案,我建议使用 scikit-image结合numpymatplotlib用于绘图。这是用 Python 转录的上述代码。请注意,我将链接引用的图像手动保存在磁盘上并将其命名为 balls.jpg:

import skimage.io
import skimage.segmentation
import numpy as np
import matplotlib.pyplot as plt

# Read in the image
# Note - intensities are floating point from [0,1]
im = skimage.io.imread('balls.jpg', True)

# Threshold the image first then clear the border
im_clear = skimage.segmentation.clear_border(im > (200.0/255.0))

# Determine where to split up the image
split_point = int(im.shape[1]/5)

# Show image in figure and hold to place dots in
plt.figure()
plt.imshow(np.dstack([im,im,im]))

# For each image...
for idx in range(5):

# Extract sub image
img = im_clear[:,idx*split_point:(idx+1)*split_point]

# Find coordinates of thresholded image
y,x = np.nonzero(img)

# Find average
xmean = x.mean()
ymean = y.mean()

# Plot on figure
plt.plot(xmean + idx*split_point, ymean, 'r.', markersize=14)

# Show image and make sure axis is removed
plt.axis('off')
plt.show()

我们得到这个数字:

enter image description here

小旁注

我完全可以跳过上面的代码并使用 regionprops(MATLAB linkscikit-image link)。您可以简单地对图像进行阈值处理,然后应用 regionprops 来找到每个白色像素簇的质心,但我想我会向您展示一种更手动的方法,以便您可以欣赏算法并理解它自己。


希望这对您有所帮助!

关于python - 如何定位图像中亮点的中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30081725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com