我正在尝试给出一张图片作为输入,并从一个小的图片数据库(≈100图片)中找到与该输入最匹配的图片。
问题本身是这样的:在我的家庭作业中,我被分配了一系列的图表(如果有人感兴趣的话,是X射线衍射模式图表),我必须将这些图表与相应的化学元素或化合物进行匹配。因此,我想到的解决方案是将图形作为输入,让代码找到具有最大相似性的图形。这里有一个图表的例子:X-ray diffraction pattern graph。
我只知道python的基础知识,不知道该查找什么,也不知道从哪里开始。有人能帮我指导我的研究吗?
发布于 2021-08-26 17:44:32
与其查看图像中的形状、高度、宽度和峰值数量,我认为你最好将数据库中的曲线“数字化”,这样你就可以有大约80个数字(每个角度一个),然后你就可以对一堆数字(例如熊猫或鲸鱼)进行统计分析,而不是对图像进行形态学(或其他)分析。
所以,我会把图中所有非蓝色的东西都变成白色(比方说),然后找出蓝色像素在每个x坐标上的最小/最大/平均y坐标。
您可以提前对数据库中的所有条目执行此操作,然后当出现新样本时,只需计算其特征并将其与预先计算的曲线进行匹配。
因此,具体来说,我建议:
#!/usr/bin/env python3
import numpy as np
import cv2
# Load the image as BGR
im = cv2.imread('A8aHv.png')
# Convert to HSV colourspace to find blues
hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
# Set low and high limit for the tones we want to identify
lo = np.uint8([116,100,100])
hi = np.uint8([124,255,255])
# Mask all blue pixels
mask = cv2.inRange(hsv,lo,hi)
# Save mask
cv2.imwrite('result.png',mask)
# Find y-value of first non-zero element in each column
firstNonZero = (mask!=0).argmax(axis=0)
print(firstNonZero)
这里是y值,这是我建议存储在数据库中用于统计分析的值:
array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
275, 276, 275, 277, 279, 276, 275, 279, 281, 284, 286, 290, 294,
293, 293, 294, 295, 295, 294, 293, 296, 296, 298, 298, 298, 299,
301, 299, 297, 300, 299, 298, 298, 295, 292, 280, 279, 281, 283,
287, 297, 299, 301, 302, 303, 308, 312, 312, 308, 309, 312, 312,
310, 311, 313, 313, 309, 308, 308, 309, 311, 313, 311, 310, 311,
312, 313, 312, 310, 310, 312, 310, 309, 309, 310, 312, 310, 310,
311, 309, 308, 307, 309, 309, 307, 308, 308, 310, 311, 307, 307,
308, 307, 309, 310, 312, 309, 310, 312, 312, 311, 311, 310, 311,
310, 308, 308, 311, 311, 308, 309, 309, 311, 309, 308, 307, 309,
309, 306, 306, 305, 302, 301, 302, 304, 304, 307, 303, 303, 304,
304, 301, 303, 303, 302, 301, 301, 299, 298, 290, 285, 281, 282,
284, 290, 291, 292, 289, 287, 287, 266, 261, 260, 259, 279, 288,
294, 291, 292, 293, 292, 292, 293, 293, 297, 294, 293, 294, 288,
289, 292, 295, 293, 292, 290, 290, 288, 290, 288, 287, 288, 291,
292, 291, 293, 294, 293, 295, 297, 297, 295, 295, 294, 288, 285,
284, 285, 286, 287, 289, 292, 294, 293, 284, 278, 222, 0, 78,
75, 93, 283, 284, 284, 285, 286, 288, 288, 290, 291, 298, 295,
296, 297, 298, 298, 298, 301, 302, 300, 300, 300, 301, 302, 300,
301, 303, 303, 303, 303, 303, 303, 303, 306, 306, 306, 307, 306,
304, 306, 307, 310, 307, 307, 305, 308, 307, 304, 306, 307, 307,
309, 308, 308, 309, 310, 307, 305, 304, 304, 303, 301, 301, 304,
306, 308, 311, 311, 309, 308, 310, 311, 310, 309, 308, 306, 305,
305, 307, 309, 305, 307, 303, 296, 293, 293, 296, 303, 305, 304,
310, 311, 296, 295, 294, 305, 308, 308, 309, 308, 309, 310, 310,
310, 312, 312, 313, 313, 316, 316, 316, 316, 316, 317, 318, 318,
318, 319, 313, 311, 310, 309, 303, 308, 310, 313, 314, 313, 310,
311, 312, 314, 315, 318, 314, 315, 316, 316, 313, 319, 320, 314,
315, 316, 316, 316, 316, 316, 315, 313, 312, 314, 314, 313, 315,
318, 319, 319, 319, 318, 318, 317, 315, 316, 321, 319, 318, 319,
320, 317, 316, 317, 318, 321, 318, 314, 316, 317, 318, 318, 310,
309, 309, 315, 319, 320, 321, 319, 320, 320, 321, 322, 322, 319,
321, 322, 322, 322, 321, 324, 322, 322, 322, 322, 322, 321, 323,
324, 325, 323, 322, 322, 322, 323, 322, 321, 320, 320, 319, 318,
317, 315, 298, 296, 300, 311, 320, 320, 320, 321, 322, 323, 323,
326, 324, 322, 325, 325, 324, 325, 325, 324, 324, 325, 322, 322,
323, 323, 323, 323, 324, 324, 323, 324, 322, 321, 322, 322, 319,
319, 320, 320, 318, 317, 319, 320, 320, 317, 316, 313, 312, 315,
315, 314, 315, 316, 321, 322, 322, 322, 320, 320, 321, 321, 323,
323, 324, 325, 321, 320, 321, 322, 322, 324, 323, 322, 323, 324,
324, 322, 322, 323, 323, 322, 322, 323, 321, 320, 320, 323, 324,
323, 322, 323, 320, 319, 301, 297, 302, 305, 317, 318, 318, 317,
315, 319, 318, 319, 318, 319, 320, 320, 321, 322, 320, 320, 318,
320, 320, 318, 317, 315, 316, 316, 316, 315, 318, 319, 319, 321,
321, 321, 320, 318, 318, 318, 316, 316, 317, 317, 318, 319, 318,
319, 320, 321, 321, 320, 320, 320, 320, 318, 318, 319, 319, 318,
318, 317, 319, 320, 317, 317, 321, 322, 319, 318, 318, 317, 317,
318, 311, 310, 309, 309, 307, 284, 288, 299, 302, 318, 319, 314,
315, 322, 321, 321, 321, 322, 322, 322, 322, 324, 323, 322, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0])
https://stackoverflow.com/questions/68942568
复制相似问题