A multi-angle crop image storage and query method for unmanned aerial vehicles

By establishing a crop image association map structure through object-centered orthophoto semantic encoding, the problems of low efficiency and low accuracy of UAV crop image query are solved, and efficient and accurate image storage and query are achieved.

CN122432367APending Publication Date: 2026-07-21CHANGCHUN INST OF TECH
View PDF 0 Cites 0 Cited by

Patent Information

Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
CHANGCHUN INST OF TECH
Filing Date
2026-06-24
Publication Date
2026-07-21

Smart Images

  • Figure CN122432367A_ABST
    Figure CN122432367A_ABST
Patent Text Reader

Abstract

The application discloses a multi-angle crop image storage and query method of a UAV, and relates to the technical field of crop image retrieval.The application is aimed at solving the problems of low query efficiency and low accuracy of query results of the existing crop image query method.The application comprises the following steps: establishing an orthographic perspective semantic coding module, inputting orthographic perspective coding input, and outputting orthographic perspective coding output; establishing a query semantic vectorization module, inputting query vectorization input, and outputting query vectorization output; calling the orthographic perspective semantic coding module to obtain orthographic perspective coding output, and outputting after filling associated edges of a crop image associated graph structure by using the orthographic perspective coding output; calling the query semantic vectorization module to obtain query vectorization output corresponding to user query text, performing vector similarity retrieval on the query vectorization output based on the crop image associated graph structure, and outputting the most matched image.The application is used for retrieving crop images.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] This invention relates to the field of crop image retrieval technology, and in particular to a method for storing and retrieving multi-angle crop images from unmanned aerial vehicles (UAVs). Background Technology

[0002] In precision agriculture management, drones are widely used to capture images of crops from multiple angles and heights in the field, obtaining detailed images of the crop canopy, stems, and root zone from different perspectives for growth assessment, pest and disease diagnosis, and phenotypic analysis. With increased shooting frequency and angles, a single planting area can accumulate hundreds to thousands of images from different perspectives in a short period. How to organize and efficiently retrieve these images according to the user's needs is the core issue limiting the efficiency of practical drone image applications. In practice, users are usually concerned with "what a certain crop or area looks like from a certain direction," rather than "a photo taken by a drone at a certain GPS coordinate and time." However, existing image management methods mainly rely on the drone's own flight parameters for organization, failing to establish a semantic association structure centered on the ground crops. This results in low efficiency when users search for images of specific crops from specific perspectives, urgently requiring an image storage and retrieval method centered on crop objects and using orthophoto semantics for association description.

[0003] Current methods for storing and retrieving multi-angle crop images from drones mainly rely on the following technical approaches: 1. Image management based on timestamp sorting: All images are stored in a file system in chronological order of capture time, allowing users to filter images by time range. The main limitations of this method are: time sorting cannot reflect the spatial correspondence between images and ground crops; users need to browse through images one by one to find the crop of interest; multiple images taken from different angles within the same time period may be adjacent in the time sequence but the subjects may be completely different, making it impossible for users to quickly locate a specific crop from a specific perspective, resulting in low crop image retrieval efficiency. 2. Image retrieval based on GPS coordinate range: This method uses the GPS coordinates of the drone at the time of capture as an index, allowing users to input a geographical range for spatial filtering. The main limitations of this method are: GPS coordinates record the drone's own flight position, not the position of the crop being photographed. When shooting at an angle, the drone's position and the crop's position may deviate significantly, making it easy to return irrelevant images when searching by drone coordinate range; furthermore, GPS retrieval does not include shooting perspective information, making it unable to answer queries such as "photographing crop number 3 from the northeast" that combine object identification and observation direction, resulting in low accuracy of crop image retrieval results. III. Image metadata parameter matching-based retrieval methods use the azimuth, pitch, and flight altitude of the image as metadata fields, allowing users to input precise angle ranges for matching queries. The main limitation of this method is that the azimuth and pitch angles in the metadata are the attitude parameters of the UAV itself, not the observation orientation relative to the crop being photographed. For example, if a UAV flies north to photograph a crop located to its west, the azimuth angle is 0 degrees (north), but the actual observation direction of the crop is from the east; the two have completely different meanings. Users must deduce the crop's perspective from the UAV's viewpoint, leading to many complex operations and reducing the efficiency of obtaining crop image retrieval results. These complex operations are also prone to errors, making it difficult to obtain accurate crop image query results. IV. Image retrieval methods based on visual content similarity extract visual features from images, and users upload reference images for retrieval based on feature similarity. The main limitation of this method is that different crops of the same species have highly similar visual appearances, and visual retrieval easily returns images that are similar in appearance but not the target crop. Visual features cannot encode observation orientation information; when users need images of the same crop from different angles, visual retrieval cannot distinguish the differences in shooting direction, resulting in low accuracy in crop image queries. Summary of the Invention

[0004] To address the problems of low query efficiency and low accuracy of existing crop image query methods, this invention proposes a method for storing and querying crop images from multiple angles using unmanned aerial vehicles (UAVs).

[0005] A method for storing and retrieving multi-angle crop images from unmanned aerial vehicles (UAVs) includes the following steps:

[0006] S1. Input the crop object list CropList, the UAV image list ImageList, the user query text QueryText, and global control parameters to establish the crop image association graph structure CropGraph;

[0007] S2. Use CropList and ImageList to obtain the orthophoto encoding input ZSYMInput, and establish the orthophoto semantic encoding module ZSYMModel. The input of ZSYMModel is ZSYMInput, and the output of ZSYMModel is the orthophoto encoding output ZSYMOutput.

[0008] S3. Use QueryText, global control parameters and CropList to obtain the query vectorized input CXSLInput, and establish the query semantic vectorization module CXSLModel. The input of CXSLModel is CXSLInput, and the output of CXSLModel is the query vectorized output CXSLOutput.

[0009] S4. Call ZSYMModel to obtain the orthophoto encoding output, and use the orthophoto encoding output to fill the associated edges of the crop image association graph structure CropGraph before outputting it.

[0010] S5. Call CXSLModel to obtain the vectorized output of the user's query text, perform vector similarity retrieval on the vectorized output of the query based on CropGraph, and output the most matching image.

[0011] Furthermore, the crop object list CropList, the UAV image list ImageList, the global control parameters, and the crop image association graph structure CropGraph in S1 are specifically as follows:

[0012] Each record in the CropList includes the following fields: CropID, x-coordinate of the crop in the regional plane coordinate system (CropPosX), y-coordinate of the crop in the regional plane coordinate system (CropPosY), CropType, CropH, canopy radius (CropCanopyR), and a list of orthophoto semantic vectors associated with the crop node (CropVecList).

[0013] CropVecList is initialized as an empty list. Each element of the list contains: the associated image ID CVImgID, the association vector CVSemVec of the crop node, and the association type CVLinkType.

[0014] The association type CVLinkType can be 1 or 2;

[0015] Each record in the ImageList corresponds to one image and includes the following fields: image ID ImgID, horizontal coordinate ImgPosX when the drone was taking the picture, vertical coordinate ImgPosY when the drone was taking the picture, drone shooting altitude ImgAlt, drone body azimuth angle ImgAzi, drone body pitch angle ImgEle, shooting time ImgTime, and focused crop ID ImgFocusCropID.

[0016] The global control parameters include: FocusDist (focus determination distance threshold), AdjVisDist (adjacent visible distance threshold), SemDim (semantic vector dimension), and TopK (number of images returned by the query).

[0017] The CropGraph is obtained in the following way:

[0018] Each record in CropList is treated as a node, and the node is identified by CropID. Each element in CropVecList is treated as a directed edge, with the starting point of the edge being the image corresponding to CVImgID and the ending point being the crop node to which the current element belongs. The attributes of the edge include the orthophoto semantic vector CVSemVec and the association type CVLinkType.

[0019] Furthermore, the specific data processing procedure of ZSYMModel in S2 is as follows:

[0020] A1. Obtain the orthophoto encoded input ZSYMInput using the crop object list CropList and the drone image list ImageList;

[0021] The orthophoto-encoded input ZSYMInput includes: CropPosX, CropPosY, CropH, and CropType for crops, and ImgPosX, ImgPosY, and ImgAlt for UAV imagery;

[0022] A2. Initialize the orthophoto semantic vector field ZSYMVec of the orthophoto-encoded output ZSYMOutput to a 10-dimensional all-zero vector.

[0023] A3. Calculate the horizontal offset of the drone relative to the crop (ZSYMDeltaX, ZSYMDeltaY), and use the horizontal offset of the drone relative to the crop to obtain the horizontal distance ZSYMHDist between the drone and the crop:

[0024]

[0025] Wherein, the coordinate difference between the drone and the crop on the X-axis is ZSYMDeltaX=ImgPosX-CropPosX; the coordinate difference between the drone and the crop on the Y-axis is ZSYMDeltaY=ImgPosY-CropPosY;

[0026] A4. With the crop as the center, north is 0 degrees, and clockwise direction is the positive direction. Calculate the orthogonal angle azimuth ZSYMRelAzi=arctan2(ZSYMDeltaX, ZSYMDeltaY).

[0027] Where arctan2 is the two-parameter arctangent function;

[0028] A5. Calculate the pitch angle of the orthophoto view ZSYMRelEle=arctan2(ImgAlt-CropH,ZSYMHDist);

[0029] A6. Construct ZSYMVec using parameters from ZSYMRelAzi, ZSYMRelEle, ZSYMHDist, ImageList, CropList, and global control parameters;

[0030] A7. Output ZSYMOutput as the result of ZSYMModel.

[0031] Furthermore, in A6, ZSYMVec is constructed using parameters from ZSYMRelAzi, ZSYMRelEle, ZSYMHDist, ImageList, CropList, and global control parameters, specifically as follows:

[0032] ZSYMVec[1]=sin(ZSYMRelAzi), ZSYMVec[2]=cos(ZSYMRelAzi);

[0033] ZSYMVec[3]=sin(ZSYMRelEle), ZSYMVec[4]=cos(ZSYMRelEle);

[0034] ZSYMVec[5]=ZSYMHDist / (ZSYMHDist+5.0);

[0035] ZSYMVec[6]=(ImgAlt-CropH) / (ABS(ImgAlt-CropH)+3.0);

[0036] ZSYMVec[7] = CropType / 10.0; if ZSYMVec[7] is greater than 1.0, then set ZSYMVec[7] = 1.0; otherwise, keep ZSYMVec[7] unchanged;

[0037] ZSYMVec[8]=sin(ZSYMRelAzi)×cos(ZSYMRelEle)×0.7+0.15;

[0038] ZSYMVec[9]=ZSYMFocusConf; ZSYMFocusConf=exp(-ZSYMHDist×ZSYMHDist / (2.0×FocusDist×FocusDist));

[0039] ZSYMVec

[10] = CropCanopyR / (ZSYMHDist + 0.5); if ZSYMVec

[10] is greater than 1.0, then set ZSYMVec

[10] = 1.0; otherwise, ZSYMVec

[10] remains unchanged;

[0040] Where sin is the sine function, cos is the cosine function, and ZSYMVec[ [This is the first one in ZSYMVec] Dimensional data, , It is a positive integer, ABS is the absolute value, exp is the exponential function with the natural constant e as the base, and ZSYMFocusConf is the focus confidence coding result.

[0041] Furthermore, the data processing procedure for CXSLModel in S3 is as follows:

[0042] B1. Obtain the vectorized query input CXSLInput using the user input text QueryText, global control parameters, and the crop object list CropList;

[0043] CXSLInput includes: QueryText, SemDim, CropType of the target crop, and CropCanopyR;

[0044] B2. Initialize the CXSLVec of the query vectorized output CXSLOutput as a 10-dimensional all-zero vector.

[0045] B3. Parse QueryText to extract the query azimuth angle CXSLAzi:

[0046] If QueryText contains an explicit azimuth number, then set CXSLAzi = azimuth number × π / 180; otherwise, set the value of CXSLAzi as follows:

[0047] If QueryText contains North but not Northeast or Northwest, set CXSLAzi=0; if it contains Northeast, set CXSLAzi=π / 4; if it contains East but not Northeast or Southeast, set CXSLAzi=π / 2; if it contains Southeast, set CXSLAzi=3×π / 4; if it contains South but not Southeast or Southwest, set CXSLAzi=π; if it contains Southwest, set CXSLAzi=5×π / 4; if it contains West but not Southwest or Northwest, set CXSLAzi=3×π / 2; if it contains Northwest, set CXSLAzi=7×π / 4; otherwise, set CXSLAzi=0.

[0048] B4. Parse QueryText to extract the query pitch angle CXSLEle:

[0049] If QueryText contains an explicit pitch angle value, then set CXSLEle = pitch angle value × π / 180; otherwise, set the value of CXSLEle as follows:

[0050] If QueryText contains overhead, direct overhead, or top views, set CXSLEle=75×π / 180; if it contains diagonally overhead or diagonally downward views, set CXSLEle=50×π / 180; if it contains eye-level, horizontal, or side views, set CXSLEle=10×π / 180; otherwise, set CXSLEle=45×π / 180.

[0051] B5. Parse QueryText to extract query distance preference CXSLDistPref:

[0052] If QueryText contains close-up or extreme close-up shots, set CXSLDistPref=0.6; if it contains long-distance or panoramic shots, set CXSLDistPref=0.2; otherwise, set CXSLDistPref=0.4.

[0053] B6. Construct CXSLVec using the parameters in CXSLAzi, CXSLEle, CXSLDistPref, and CropList;

[0054] B7. Output CXSLOutput as the result of CXSLModel.

[0055] Furthermore, in B6, CXSLVec is constructed using parameters from CXSLAzi, CXSLEle, CXSLDistPref, and CropList, specifically as follows:

[0056] CXSLVec[1]=sin(CXSLAzi); CXSLVec[2]=cos(CXSLAzi);

[0057] CXSLVec[3]=sin(CXSLEle); CXSLVec[4]=cos(CXSLEle);

[0058] CXSLVec[5]=CXSLDistPref;

[0059] CXSLVec[6]=sin(CXSLEle)×0.8+0.1;

[0060] CXSLVec[7] = CropType of CXSLInput / 10.0; if CXSLVec[7] is greater than 1.0, then set CXSLVec[7] = 1.0; otherwise, keep CXSLVec[7] unchanged;

[0061] CXSLVec[8]=sin(CXSLAzi)×cos(CXSLEle)×0.7+0.15;

[0062] If QueryText contains focus, alignment, or right face, then set CXSLVec[9]=0.9; otherwise, set CXSLVec[9]=0.5;

[0063] CXSLVec

[10] = CropCanopyR of CXSLInput / (CXSLDistPref × 10.0 + 0.5); If CXSLVec

[10] is greater than 1.0, then set CXSLVec

[10] = 1.0; otherwise, keep CXSLVec

[10] unchanged;

[0064] Among them, CXSLVec[ [This is the first in CXSLVec] Dimensional data.

[0065] Furthermore, in S4, the call to ZSYMModel obtains the orthophoto encoded output, and the orthophoto encoded output is used to fill the associated edges of the crop image association graph structure CropGraph before outputting the result. Specifically:

[0066] S401. Initialize the image traversal counter GraphCounter1=1;

[0067] S402. Retrieve ImgPosX and ImgPosY from the first record of ImageList (GraphCounter1); initialize the nearest crop distance temporary storage GraphMinDist=999999; initialize the nearest crop ID temporary storage GraphMinCropID=0; initialize the crop traversal counter GraphCounter2=1;

[0068] S403. Take the CropPosX and CropPosY of the GraphCounter2 record in CropList, and calculate the horizontal distance GraphDist. If GraphDist is less than GraphMinDist, set GraphMinDist=GraphDist and GraphMinCropID=CropID of the current record, and then execute S404. Otherwise, execute S404 directly.

[0069] S404. Set GraphCounter2 = GraphCounter2 + 1; if GraphCounter2 is less than or equal to CropTotal, go to S403; otherwise, go to S405.

[0070] Where CropTotal is the total number of crops in CropList;

[0071] S405. If GraphMinDist is less than or equal to FocusDist, set ImgFocusCropID of the GraphCounter1 record in ImageList to GraphMinCropID; construct ZSYMInput using the crop position parameters corresponding to GraphMinCropID and the current image parameters, and call ZSYMModel to obtain ZSYMOutput; add the following elements to the CropVecList of the records in CropList where CropID is equal to GraphMinCropID: CVImgID = current ImgID, CVSemVec = ZSYMVec of ZSYMOutput, CVLinkType = 1, and then execute S406; otherwise, execute S406 directly.

[0072] Where FocusDist is the focusing distance threshold;

[0073] S406. Initialize the adjacent visible crop traversal counter GraphCounter3=1;

[0074] S407. Retrieve the GraphCounter3 record from CropList; if the CropID in the GraphCounter3 record of CropList is equal to GraphMinCropID, then proceed to S409; otherwise, calculate the horizontal distance GraphAdjDist between the current crop and the current image; if GraphAdjDist is greater than AdjVisDist, then proceed to S409; otherwise, construct ZSYMInput using the position parameters of the current crop and the parameters of the current image, and call ZSYMModel to obtain ZSYMOutput; add the following elements to the CropVecList of the current crop: CVImgID = current ImgID, CVSemVec = ZSYMVec of ZSYMOutput, CVLinkType = 2, and then proceed to S408;

[0075] S408. Adjacent visible association established, output multi-angle image association map centered on crop;

[0076] S409. Set GraphCounter3 = GraphCounter3 + 1; if GraphCounter3 is less than or equal to CropTotal, go to S407; otherwise, go to S410.

[0077] S410, Set GraphCounter1 = GraphCounter1 + 1; If GraphCounter1 is less than or equal to ImgTotal, go to S402; otherwise, go to S411.

[0078] Where ImgTotal is the total number of images in ImageList.

[0079] Furthermore, the horizontal distance GraphDist in S403 is specifically:

[0080] .

[0081] Furthermore, in S5, the call to CXSLModel obtains the query vectorized output corresponding to the user's query text, performs vector similarity retrieval on the query vectorized output based on CropGraph, and outputs the most matching image, specifically:

[0082] S501. Parse QueryText to extract the target crop ID QueryCropID: Scan QueryText and use the integer in the combination of numbers and characters as QueryCropID; if there is no combination of numbers and characters, set QueryCropID=0.

[0083] S502. If QueryCropID is greater than 0 and exists in CropList, then retrieve the values ​​of CropType and CropCanopyR of the current crop; otherwise, set CropType=1 and CropCanopyR=0.5; construct CXSLInput using QueryText, SemDim, CropType and CropCanopyR; call CXSLModel to obtain CXSLOutput, and set the query vector QueryVec=CXSLOutput's CXSLVec;

[0084] S503. If QueryCropID is greater than 0, then search in the CropVecList of records in CropList where CropID is equal to QueryCropID: set search counter SearchCounter=1, and then go to S504; otherwise, go directly to S505.

[0085] S504. Retrieve the CVSemVec and CVImgID of the SearchCounter-th element in CropVecList; Use the cosine similarity SearchScore between QueryVec and CVSemVec to add elements to QueryResultList based on SearchScore and CVImgID; If SearchCounter is less than or equal to the number of elements in CropVecList, go to S504; otherwise, go to S507.

[0086] QueryResultList is the output list of query results. Each element in QueryResultList includes: QRImgID image number, QRScore matching score, and QRCropID associated crop number.

[0087] S505. If QueryCropID equals 0, then search CropVecList for all crops in CropList one by one: establish a global crop traversal counter AllCropCounter=1;

[0088] S506. Retrieve the CropVecList from the AllCropCounter record of CropList, calculate the cosine similarity between CVSemVec and CVImgID in CropVecList, and add it to QueryResultList; set AllCropCounter = AllCropCounter + 1; if AllCropCounter is less than or equal to CropTotal, go to S506, otherwise go to S507.

[0089] S507. Sort the QueryResultList by QRScore from largest to smallest; set the output counter OutCounter=1;

[0090] S508. Retrieve the QRImgID of the OutCounter record in QueryResultList; retrieve the record whose ImgID is equal to the current QRImgID from ImageList to obtain the complete information of the current image; retrieve the QRCropID of the OutCounter record in QueryResultList, retrieve the record whose CropID is equal to the current QRCropID from CropList to obtain the location CropPosX and CropPosY of the associated crop and the crop type CropType; output the OutCounter query result.

[0091] The complete information for the current image includes: image file path, capture time (ImgTime), capture height (ImgAlt), and focus crop ID (ImgFocusCropID);

[0092] The query results include: image ID QRImgID, matching score QRScore, associated crop ID QRCropID, image file path, and shooting parameters;

[0093] S509. Set OutCounter = OutCounter + 1; if OutCounter is less than or equal to TopK and OutCounter is less than or equal to the number of elements in QueryResultList, then go to S508; otherwise, end the search.

[0094] Furthermore, in S504, the cosine similarity SearchScore between QueryVec and CVSemVec is used to add elements to QueryResultList based on SearchScore and CVImgID, specifically:

[0095] First, calculate the cosine similarity between QueryVec and CVSemVec: SearchScore = sum of the products of the corresponding dimensions of QueryVec and CVSemVec / (the modulus of QueryVec × the modulus of CVSemVec + 0.0001).

[0096] If the CVLinkType of the SearchCounter-th element in CropVecList is equal to 1, then set SearchScore = SearchScore × 1.1; otherwise, keep SearchScore unchanged.

[0097] Then, add the following elements to QueryResultList: QRImgID=CVImgID, QRScore=SearchScore, QRCropID=QueryCropID; SearchCounter=SearchCounter+1.

[0098] The beneficial effects of this invention are as follows:

[0099] This invention provides a method for storing and querying multi-angle crop images from unmanned aerial vehicles (UAVs) using object-centered orthogonal perspective semantic encoding. The invention constructs an orthogonal perspective semantic encoding module and a query semantic vectorization module. The orthogonal perspective semantic encoding module calculates the azimuth and elevation angles of the UAV relative to the crop being photographed, using the crop object as the coordinate origin and due north as the reference point, and encodes them into a 10-dimensional orthogonal perspective semantic vector. For each image, the focused crop and adjacent visible crops are identified, and the orthogonal perspective semantic vectors are stored in the corresponding crop nodes to form a multi-angle image association map centered on the crop. The query semantic vectorization module decomposes the user's natural language query into a target crop identifier, observation azimuth, and elevation description, and encodes it into a query vector isomorphic to the orthogonal perspective semantic vector. Cosine similarity is used to search for and match the crop node association vectors, returning the corresponding image, thus realizing multi-angle UAV image semantic storage and querying centered on the crop object. On the one hand, this invention does not use the drone's own attitude parameters as the azimuth description of the image. Instead, it recalculates the observation azimuth and pitch angles of the drone relative to the crop using the crop as the coordinate origin and true north as the zero-degree reference. This transforms the traditional "where the drone took the picture" into object-centered semantics of "from which direction is the crop seen?" It allows for direct azimuth recognition without relying on the user's understanding of the drone's flight parameters, avoiding semantic misalignment between existing metadata parameters and the actual observed location of the crop, and eliminating the need for complex subsequent conversion operations. This improves the efficiency of obtaining crop image retrieval results. Furthermore, this invention can distinguish differences in shooting directions, improving the accuracy of crop image queries. On the other hand, the query semantic vectorization module does not require users to input precise angle values ​​or GPS coordinate ranges. Instead, it automatically parses azimuth words and pitch descriptions in natural language into semantic vectors isomorphic to the storage structure. Fuzzy matching is performed in the association vectors of crop nodes using cosine similarity, without being limited by angle precision or expression habits. This lowers the query threshold while improving the accuracy of crop image queries. Attached Figure Description

[0100] Figure 1 This is a flowchart of the present invention. Detailed Implementation

[0101] Specific implementation method one: as follows Figure 1As shown, the specific process of a UAV multi-angle crop image storage and retrieval method in this embodiment is as follows:

[0102] S1. Input the crop object list CropList, the UAV image list ImageList, the user query text QueryText, and global control parameters to establish the initial structure of the crop image association graph structure CropGraph, specifically:

[0103] S101. Input a list of crop objects, CropList. Each record in CropList corresponds to a marked crop object in the planting area and contains the following fields:

[0104] CropID: Crop ID (integer, starting from 1);

[0105] CropPosX: The X coordinate (in meters) of the crop in the regional planar coordinate system;

[0106] CropPosY: Y-coordinate of the crop in the regional planar coordinate system (meters);

[0107] CropType: Crop type number;

[0108] CropH: Crop height (meters);

[0109] CropCanopyR: Canopy radius (meters);

[0110] CropVecList: A list of orthophoto semantic vectors associated with this crop node. It is initialized as an empty list. Each element of the list contains the associated image number CVImgID, the crop node's association vector CVSemVec (a 10-dimensional semantic vector), and the association type CVLinkType.

[0111] The association type CVLinkType can be 1 or 2. When the association type CVLinkType is 1, it indicates a focused association. When the association type CVLinkType is 2, it indicates an adjacent visible association.

[0112] The origin of the regional planar coordinate system is the upper left corner of the planting area, the north-south direction is the Y-axis, and the east-west direction is the X-axis;

[0113] S102. Input the drone image list ImageList. Each record in ImageList corresponds to one image and contains the following fields:

[0114] ImgID: Image ID;

[0115] ImgPosX: X coordinate (meters) during drone photography;

[0116] ImgPosY: Y coordinate (meters) during drone photography;

[0117] ImgAlt: Drone shooting altitude (meters);

[0118] ImgAzi: Azimuth angle of the UAV (degrees, 0 to 360, 0 is due north);

[0119] ImgEle: Unmanned aerial vehicle pitch angle (degrees);

[0120] ImgTime: Shooting time;

[0121] ImgFocusCropID: Focused crop ID, initialized to 0;

[0122] S103. Input the user's query text (QueryText);

[0123] S104. Input global control parameters:

[0124] Input the focus determination distance threshold FocusDist (meters). The default value for FocusDist is 3.0.

[0125] Input the adjacent visible distance threshold AdjVisDist (meters). The default value of AdjVisDist is 8.0.

[0126] Input semantic vector dimension SemDim, the default value of SemDim is 10;

[0127] The query returns the TopK number of images, with a default value of 5.

[0128] S105. Get the total number of crops in CropList (CropTotal); get the total number of images in ImageList (ImgTotal); create a query result output list QueryResultList = empty list;

[0129] Each element in QueryResultList includes: QRImgID image ID, QRScore matching score, and QRCropID associated crop ID;

[0130] S106. Establish the initial structure of the CropGraph (crop image association map);

[0131] Each record in CropList is treated as a node, and the node is identified by CropID. Each element in CropVecList is treated as a directed edge, with the starting point of the edge being the image corresponding to CVImgID and the ending point being the crop node to which the current element belongs. The attributes of the edge include the orthophoto semantic vector CVSemVec and the association type CVLinkType (CVLinkType 1 indicates a focused association edge, and CVLinkType 2 indicates an adjacent visible association edge).

[0132] In this step, all nodes in the initial structure of CropGraph are created according to CropList and all edges are empty. The related edges will be filled in step S4.

[0133] S2. Obtain the orthophoto encoding input ZSYMInput using the crop object list CropList and the UAV image list ImageList. Establish the orthophoto semantic encoding module ZSYMModel. The input of ZSYMModel is ZSYMInput, and the output of ZSYMModel is the orthophoto encoding output ZSYMOutput. Specifically:

[0134] S201. Obtain the orthophoto encoding input ZSYMInput using the crop object list CropList and the UAV image list ImageList, and establish the orthophoto semantic encoding module ZSYMModel. The input of ZSYMModel is ZSYMInput.

[0135] The orthophoto-encoded input ZSYMInput includes: CropPosX, CropPosY, CropH, and CropType for crops, and ImgPosX, ImgPosY, and ImgAlt for UAV imagery;

[0136] S202. Initialize the orthophoto semantic vector field ZSYMVec of the orthophoto-encoded output ZSYMOutput to a 10-dimensional all-zero vector.

[0137] S203. Calculate the horizontal offset of the drone relative to the crop (ZSYMDeltaX, ZSYMDeltaY), and use the horizontal offset of the drone relative to the crop to obtain the horizontal distance ZSYMHDist between the drone and the crop:

[0138]

[0139] Wherein, the coordinate difference between the drone and the crop on the X-axis is ZSYMDeltaX=ImgPosX-CropPosX; the coordinate difference between the drone and the crop on the Y-axis is ZSYMDeltaY=ImgPosY-CropPosY;

[0140] S204. With the crop as the center, due north as 0 degrees, and clockwise direction as the positive direction, calculate the orthogonal angle azimuth ZSYMRelAzi=arctan2(ZSYMDeltaX, ZSYMDeltaY).

[0141] Here, arctan2 is a two-parameter arctangent function (based on the positive Y-axis direction, i.e., true north), and the value returned by arctan2 is in radians;

[0142] S205. Calculate the pitch angle of the orthophoto (positive when viewed from the horizontal): ZSYMRelEle=arctan2(ImgAlt-CropH,ZSYMHDist);

[0143] arctan2 returns radians;

[0144] S206. Encode the azimuth segment using ZSYMRelAzi: ZSYMVec[1]=sin(ZSYMRelAzi), ZSYMVec[2]=cos(ZSYMRelAzi);

[0145] Wherein, sin is the sine function, cos is the cosine function, ZSYMVec[1] is the first dimension data in ZSYMVec, and ZSYMVec[2] is the second dimension data in ZSYMVec;

[0146] S207. Encode the pitch angle segment using ZSYMRelEle: ZSYMVec[3]=sin(ZSYMRelEle); ZSYMVec[4]=cos(ZSYMRelEle);

[0147] Among them, ZSYMVec[3] is the third dimension data in ZSYMVec, and ZSYMVec[4] is the fourth dimension data in ZSYMVec;

[0148] S208. Encoding the horizontal distance normalization using ZSYMHDist:

[0149] ZSYMVec[5]=ZSYMHDist / (ZSYMHDist+5.0)

[0150] Among them, ZSYMVec[5] is the 5th dimension data in ZSYMVec;

[0151] S209. Encode the height difference normalization using ImgAlt and CropH:

[0152] ZSYMVec[6]=(ImgAlt-CropH) / (ABS(ImgAlt-CropH)+3.0)

[0153] Where ABS is the absolute value, and ZSYMVec[6] is the 6th dimension data in ZSYMVec;

[0154] S210. Use CropType to encode the crop type normalization amount: ZSYMVec[7] = CropType / 10.0; if ZSYMVec[7] is greater than 1.0, then set ZSYMVec[7] = 1.0; otherwise, keep the original value of ZSYMVec[7] unchanged.

[0155] Among them, ZSYMVec[7] is the 7th dimension data in ZSYMVec;

[0156] S211, Encode the azimuth-elevation coupling term using ZSYMRelAzi and ZSYMRelEle: ZSYMVec[8]=sin(ZSYMRelAzi)×cos(ZSYMRelEle)×0.7+0.15;

[0157] Among them, ZSYMVec[8] is the 8th dimension of data in ZSYMVec;

[0158] S212, Encode the focus confidence using ZSYMHDist: ZSYMVec[9]=ZSYMFocusConf; ZSYMFocusConf=exp(-ZSYMHDist×ZSYMHDist / (2.0×FocusDist×FocusDist));

[0159] Where exp is an exponential function with the natural constant e as the base, FocusDist is the focus determination distance threshold, ZSYMFocusConf is the focus confidence coding result, and ZSYMVec[9] is the 9th dimension data in ZSYMVec;

[0160] S213. Encode the canopy cover estimate using ZSYMHDist: ZSYMVec

[10] = CropCanopyR / (ZSYMHDist + 0.5); if ZSYMVec

[10] is greater than 1.0, set ZSYMVec

[10] = 1.0; otherwise, ZSYMVec

[10] remains unchanged.

[0161] Where CropCanopyR is the canopy radius, and ZSYMVec

[10] is the 10th dimension data in ZSYMVec;

[0162] S214. Output ZSYMOutput as the result of ZSYMModel.

[0163] S3. Using the user-input text QueryText, global control parameters, and the crop object list CropList, obtain the query vectorized input CXSLInput. Establish the query semantic vectorization module CXSLModel. The input to CXSLModel is CXSLInput, and the output of CXSLModel is the query vectorized output CXSLOutput. Specifically:

[0164] S301. Obtain the query vectorized input CXSLInput using the user input text QueryText, global control parameters, and crop object list CropList. Establish the query semantic vectorization module CXSLModel. The input of CXSLModel is the query vectorized input CXSLInput.

[0165] CXSLInput includes: QueryText, SemDim, CropType of the target crop, and CropCanopyR;

[0166] S302. Initialize the CXSLVec of the query vectorized output CXSLOutput as a 10-dimensional all-zero vector.

[0167] S303. Parse QueryText to extract the query azimuth angle CXSLAzi (radians):

[0168] If QueryText contains an explicit azimuth number, then set CXSLAzi = azimuth number × π / 180; otherwise, set the value of CXSLAzi as follows:

[0169] If the QueryText contains "North" but not "Northeast" or "Northwest", set CXSLAzi = 0; if the QueryText contains "Northeast", set CXSLAzi = π / 4; if the QueryText contains "East" but not "Northeast" or "Southeast", set CXSLAzi = π / 2; if the QueryText contains "Southeast", set CXSLAzi = 3×π / 4; if the QueryText contains "South" but not "Southeast" or "Southwest", set CXSLAzi = π; if the QueryText contains "Southwest", set CXSLAzi = 5×π / 4; if the QueryText contains "West" but not "Southwest" or "Northwest", set CXSLAzi = 3×π / 2; if the QueryText contains "Northwest", set CXSLAzi = 7×π / 4; otherwise, set CXSLAzi = 0.

[0170] S304. Parse QueryText to extract the query pitch angle CXSLEle (radians):

[0171] If QueryText contains an explicit pitch angle value, then set CXSLEle = pitch angle value × π / 180; otherwise, set the value of CXSLEle as follows:

[0172] If QueryText contains "overhead shot", "directly above", or "top", then set CXSLEle = 75 × π / 180;

[0173] If QueryText contains "diagonally upward" or "diagonally downward", then set CXSLEle=50×π / 180;

[0174] If QueryText contains "eye level", "horizontal", or "side view", then set CXSLEle = 10 × π / 180;

[0175] Otherwise, let CXSLEle = 45 × π / 180;

[0176] S305. Parse QueryText to extract query distance preference CXSLDistPref:

[0177] If QueryText contains "close-up" or "close-up", set CXSLDistPref=0.6; if it contains "long distance" or "panoramic view", set CXSLDistPref=0.2; otherwise, set CXSLDistPref=0.4.

[0178] S306. Use CXSLAzi encoding to query the azimuth segment of the vector: CXSLVec[1]=sin(CXSLAzi); CXSLVec[2]=cos(CXSLAzi);

[0179] Among them, CXSLVec[1] is the first dimension data in CXSLVec, and CXSLVec[2] is the first dimension data in CXSLVec;

[0180] S307. Use CXSLEle encoding to query the pitch angle segment of the vector: CXSLVec[3]=sin(CXSLEle); CXSLVec[4]=cos(CXSLEle);

[0181] Among them, CXSLVec[3] is the third dimension of CXSLVec, and CXSLVec[4] is the fourth dimension of CXSLVec;

[0182] S308. Encode the query vector distance preference segment using CXSLDistPref: CXSLVec[5]=CXSLDistPref;

[0183] Among them, CXSLVec[5] is the 5th dimension of CXSLVec;

[0184] S309, Using CXSLEle encoding to query the height preference segment of the vector: CXSLVec[6]=sin(CXSLEle)×0.8+0.1;

[0185] Among them, CXSLVec[6] is the 6th dimension data in CXSLVec;

[0186] S310. Use CropType encoding to query the vector crop type segment: CXSLVec[7] = CropType of CXSLInput / 10.0; if CXSLVec[7] is greater than 1.0, then set CXSLVec[7] = 1.0; otherwise, keep CXSLVec[7] unchanged.

[0187] Among them, CXSLVec[7] is the 7th dimension data in CXSLVec;

[0188] S311. Use CXSLAzi and CXSLEle to encode the azimuth-pitch coupling term of the query vector: CXSLVec[8]=sin(CXSLAzi)×cos(CXSLEle)×0.7+0.15;

[0189] Among them, CXSLVec[8] is the 8th dimension of CXSLVec;

[0190] S312. Encode the query vector focus preference using QueryText: If QueryText contains "focus", "align", or "direct", then set CXSLVec[9]=0.9; otherwise, set CXSLVec[9]=0.5.

[0191] Among them, CXSLVec[9] is the 9th dimension of data in CXSLVec;

[0192] S313. Encode the canopy coverage preference of the query vector using CropCanopyR and CXSLDistPref: CXSLVec

[10] = CropCanopyR of CXSLInput / (CXSLDistPref × 10.0 + 0.5); if CXSLVec

[10] is greater than 1.0, then set CXSLVec

[10] = 1.0; otherwise, keep CXSLVec

[10] unchanged.

[0193] S314. Output CXSLOutput as the result of CXSLModel.

[0194] S4. Call ZSYMModel to obtain the orthophoto encoding output. Calculate the orthophoto semantic vector using the orthophoto encoding output and store it in the corresponding crop node. Determine the focused crop and adjacent visible crops for each image. Fill the crop image association graph structure (CropGraph) with association edges and output the crop image association graph structure (CropGraph). Specifically:

[0195] S401. Initialize the image traversal counter GraphCounter1=1;

[0196] S402. Retrieve ImgPosX and ImgPosY from the first record of ImageList (GraphCounter1); initialize the nearest crop distance temporary storage GraphMinDist=999999; initialize the nearest crop ID temporary storage GraphMinCropID=0; initialize the crop traversal counter GraphCounter2=1;

[0197] S403. Retrieve CropPosX and CropPosY from the GraphCounter2 record of CropList to calculate the horizontal distance. If GraphDist is less than GraphMinDist, set GraphMinDist=GraphDist, GraphMinCropID=CropID of the current record, and then execute S404; otherwise, execute S404 directly.

[0198] S404. Set GraphCounter2 = GraphCounter2 + 1; if GraphCounter2 is less than or equal to CropTotal, go to S403; otherwise, go to S405.

[0199] Where CropTotal is the total number of crops in CropList;

[0200] S405. If GraphMinDist is less than or equal to FocusDist, set ImgFocusCropID of the GraphCounter1 record in ImageList to GraphMinCropID; construct ZSYMInput using the crop position parameters corresponding to GraphMinCropID and the current image parameters, and call ZSYMModel to obtain ZSYMOutput; add the following elements to the CropVecList of the records in CropList where CropID is equal to GraphMinCropID: CVImgID = current ImgID, CVSemVec = ZSYMVec of ZSYMOutput, CVLinkType = 1, and then execute S406; otherwise, execute S406 directly.

[0201] Where FocusDist is the focusing distance threshold;

[0202] S406. Initialize the adjacent visible crop traversal counter GraphCounter3=1;

[0203] S407. Retrieve the GraphCounter3 record from CropList; if the CropID in the GraphCounter3 record of CropList is equal to GraphMinCropID, then proceed to S409; otherwise, calculate the horizontal distance GraphAdjDist between the current crop and the current image; if GraphAdjDist is greater than AdjVisDist, then proceed to S409; otherwise, construct ZSYMInput using the position parameters of the current crop and the parameters of the current image, and call ZSYMModel to obtain ZSYMOutput; add the following elements to the CropVecList of the current crop: CVImgID = current ImgID, CVSemVec = ZSYMVec of ZSYMOutput, CVLinkType = 2, and then proceed to S408;

[0204] S408. Adjacent visible association established, output multi-angle image association map centered on crop;

[0205] S409. Set GraphCounter3 = GraphCounter3 + 1; if GraphCounter3 is less than or equal to CropTotal, go to S407; otherwise, go to S410.

[0206] S410, Set GraphCounter1 = GraphCounter1 + 1; If GraphCounter1 is less than or equal to ImgTotal, go to S402, otherwise go to S411.

[0207] S5. Call CXSLModel to convert the user query text into a query vector, obtain the query vectorized output, and perform a vector similarity search on the query vectorized output based on the crop image association graph structure CropGraph to obtain the most matching image. Specifically:

[0208] S501. Analyze QueryText to extract the target crop number QueryCropID: Scan QueryText, and take the integer in the combination of the number and the "number" character in QueryText as QueryCropID; if there is no combination of the number and the "number" character, set QueryCropID = 0;

[0209] S502. If QueryCropID is greater than 0 and exists in CropList, take the CropType and CropCanopyR values of the current crop; otherwise, set CropType = 1 and CropCanopyR = 0.5 as default values; construct CXSLInput using QueryText, SemDim, CropType, and CropCanopyR; call CXSLModel to obtain CXSLOutput, and set the query vector QueryVec = CXSLVec of CXSLOutput;

[0210] S503. If QueryCropID is greater than 0, perform a search in the CropVecList of the record in CropList whose CropID is equal to QueryCropID: Establish a search counter SearchCounter = 1, and then go to S504; otherwise, go to S505;

[0211] S504. Take the CVSemVec and CVImgID of the SearchCounter-th element of CropVecList; calculate the cosine similarity between QueryVec and CVSemVec: SearchScore = sum of the products of the corresponding dimensions of QueryVec and CVSemVec / (the modulus of QueryVec × the modulus of CVSemVec + 0.0001); if the CVLinkType of the SearchCounter-th element of CropVecList is equal to 1, then set SearchScore = SearchScore × 1.1 (additional weighting for focused associations); otherwise, keep SearchScore unchanged; then, add the following elements to QueryResultList: QRImgID = CVImgID, QRScore = SearchScore, QRCropID = QueryCropID; SearchCounter = SearchCounter + 1; if SearchCounter is less than or equal to the number of elements in CropVecList, go to S504; otherwise, go to S507.

[0212] S505. If QueryCropID equals 0, then search CropVecList for all crops in CropList one by one: establish a global crop traversal counter AllCropCounter=1;

[0213] S506. Retrieve the CropVecList from the AllCropCounter record of CropList, calculate the cosine similarity between CVSemVec and CVImgID in CropVecList, and add it to QueryResultList (set QRCropID to the CropID of this crop); set AllCropCounter = AllCropCounter + 1; if AllCropCounter is less than or equal to CropTotal, go to S506, otherwise go to S507.

[0214] S507. Sort the QueryResultList by QRScore from largest to smallest; set the output counter OutCounter=1;

[0215] S508. Retrieve the QRImgID of the OutCounter record in QueryResultList; retrieve the record whose ImgID is equal to the current QRImgID from ImageList to obtain the complete information of the current image; retrieve the QRCropID of the OutCounter record in QueryResultList, retrieve the record whose CropID is equal to the current QRCropID from CropList to obtain the location CropPosX and CropPosY of the associated crop and the crop type CropType; output the OutCounter query result.

[0216] The complete information for the current image includes: image file path, capture time (ImgTime), capture height (ImgAlt), and focus crop ID (ImgFocusCropID);

[0217] The query results include: image ID QRImgID, matching score QRScore, associated crop ID QRCropID, image file path, and shooting parameters;

[0218] S509. Set OutCounter = OutCounter + 1; if OutCounter is less than or equal to TopK and OutCounter is less than or equal to the number of elements in QueryResultList, then go to S508; otherwise, end the search.

Claims

1. A method for storing and retrieving multi-angle crop images from unmanned aerial vehicles (UAVs), characterized in that: The specific process of the method is as follows: S1. Input the crop object list CropList, the UAV image list ImageList, the user query text QueryText, and global control parameters to establish the crop image association graph structure CropGraph; S2. Use CropList and ImageList to obtain the orthophoto encoding input ZSYMInput, and establish the orthophoto semantic encoding module ZSYMModel. The input of ZSYMModel is ZSYMInput, and the output of ZSYMModel is the orthophoto encoding output ZSYMOutput. S3. Use QueryText, global control parameters and CropList to obtain the query vectorized input CXSLInput, and establish the query semantic vectorization module CXSLModel. The input of CXSLModel is CXSLInput, and the output of CXSLModel is the query vectorized output CXSLOutput. S4. Call ZSYMModel to obtain the orthophoto encoding output, and use the orthophoto encoding output to fill the associated edges of the crop image association graph structure CropGraph before outputting it. S5. Call CXSLModel to obtain the vectorized output of the user's query text, perform vector similarity retrieval on the vectorized output of the query based on CropGraph, and output the most matching image.

2. The method for storing and querying multi-angle crop images from a UAV according to claim 1, characterized in that: The crop object list CropList, the UAV image list ImageList, the global control parameters, and the crop image association graph structure CropGraph in S1 are as follows: Each record in the CropList includes the following fields: CropID, x-coordinate of the crop in the regional plane coordinate system (CropPosX), y-coordinate of the crop in the regional plane coordinate system (CropPosY), CropType, CropH, canopy radius (CropCanopyR), and a list of orthophoto semantic vectors associated with the crop node (CropVecList). CropVecList is initialized as an empty list. Each element of the list contains: the associated image ID CVImgID, the association vector CVSemVec of the crop node, and the association type CVLinkType. The association type CVLinkType can be 1 or 2; Each record in the ImageList corresponds to one image and includes the following fields: image ID ImgID, horizontal coordinate ImgPosX when the drone was taking the picture, vertical coordinate ImgPosY when the drone was taking the picture, drone shooting altitude ImgAlt, drone body azimuth angle ImgAzi, drone body pitch angle ImgEle, shooting time ImgTime, and focused crop ID ImgFocusCropID. The global control parameters include: FocusDist (focus determination distance threshold), AdjVisDist (adjacent visible distance threshold), SemDim (semantic vector dimension), and TopK (number of images returned by the query). The CropGraph is obtained in the following way: Each record in CropList is treated as a node, and the node is identified by CropID. Each element in CropVecList is treated as a directed edge, with the starting point of the edge being the image corresponding to CVImgID and the ending point being the crop node to which the current element belongs. The attributes of the edge include the orthophoto semantic vector CVSemVec and the association type CVLinkType.

3. The method for storing and querying multi-angle crop images from a UAV according to claim 2, characterized in that: The specific data processing procedure for ZSYMModel in S2 is as follows: A1. Obtain the orthophoto encoded input ZSYMInput using the crop object list CropList and the drone image list ImageList; The orthophoto-encoded input ZSYMInput includes: CropPosX, CropPosY, CropH, and CropType for crops, and ImgPosX, ImgPosY, and ImgAlt for UAV imagery; A2. Initialize the orthophoto semantic vector field ZSYMVec of the orthophoto-encoded output ZSYMOutput to a 10-dimensional all-zero vector. A3. Calculate the horizontal offset of the drone relative to the crop (ZSYMDeltaX, ZSYMDeltaY), and use the horizontal offset of the drone relative to the crop to obtain the horizontal distance ZSYMHDist between the drone and the crop: Wherein, the coordinate difference between the drone and the crop on the X-axis is ZSYMDeltaX=ImgPosX-CropPosX; the coordinate difference between the drone and the crop on the Y-axis is ZSYMDeltaY=ImgPosY-CropPosY; A4. With the crop as the center, north is 0 degrees, and clockwise direction is the positive direction. Calculate the orthogonal angle azimuth ZSYMRelAzi=arctan2(ZSYMDeltaX, ZSYMDeltaY). Where arctan2 is the two-parameter arctangent function; A5. Calculate the pitch angle of the orthophoto view ZSYMRelEle=arctan2(ImgAlt-CropH,ZSYMHDist); A6. Construct ZSYMVec using parameters from ZSYMRelAzi, ZSYMRelEle, ZSYMHDist, ImageList, CropList, and global control parameters; A7. Output ZSYMOutput as the result of ZSYMModel.

4. The method for storing and querying multi-angle crop images from a UAV according to claim 3, characterized in that: The A6 constructs ZSYMVec using parameters from ZSYMRelAzi, ZSYMRelEle, ZSYMHDist, ImageList, CropList, and global control parameters, specifically as follows: ZSYMVec[1]=sin(ZSYMRelAzi), ZSYMVec[2]=cos(ZSYMRelAzi); ZSYMVec[3]=sin(ZSYMRelEle), ZSYMVec[4]=cos(ZSYMRelEle); ZSYMVec[5]=ZSYMHDist / (ZSYMHDist+5.0); ZSYMVec[6]=(ImgAlt-CropH) / (ABS(ImgAlt-CropH)+3.0); ZSYMVec[7] = CropType / 10.0; if ZSYMVec[7] is greater than 1.0, then set ZSYMVec[7] = 1.0; otherwise, keep ZSYMVec[7] unchanged; ZSYMVec[8]=sin(ZSYMRelAzi)×cos(ZSYMRelEle)×0.7+0.15; ZSYMVec[9]=ZSYMFocusConf; ZSYMFocusConf=exp(-ZSYMHDist×ZSYMHDist / (2.0×FocusDist×FocusDist)); ZSYMVec[10] = CropCanopyR / (ZSYMHDist + 0.5); if ZSYMVec[10] is greater than 1.0, then set ZSYMVec[10] = 1.0; otherwise, ZSYMVec[10] remains unchanged; Where sin is the sine function, cos is the cosine function, and ZSYMVec[ [This is the first one in ZSYMVec] Dimensional data, , It is a positive integer, ABS is the absolute value, exp is the exponential function with the natural constant e as the base, and ZSYMFocusConf is the focus confidence coding result.

5. The method for storing and querying multi-angle crop images from a UAV according to claim 4, characterized in that: The data processing procedure for CXSLModel in S3 is as follows: B1. Obtain the vectorized query input CXSLInput using the user input text QueryText, global control parameters, and the crop object list CropList; CXSLInput includes: QueryText, SemDim, CropType of the target crop, and CropCanopyR; B2. Initialize the CXSLVec of the query vectorized output CXSLOutput as a 10-dimensional all-zero vector. B3. Parse QueryText to extract the query azimuth angle CXSLAzi: If QueryText contains an explicit azimuth number, then set CXSLAzi = azimuth number × π / 180; otherwise, set the value of CXSLAzi as follows: If QueryText contains North but not Northeast or Northwest, set CXSLAzi=0; if it contains Northeast, set CXSLAzi=π / 4; if it contains East but not Northeast or Southeast, set CXSLAzi=π / 2; if it contains Southeast, set CXSLAzi=3×π / 4; if it contains South but not Southeast or Southwest, set CXSLAzi=π; if it contains Southwest, set CXSLAzi=5×π / 4; if it contains West but not Southwest or Northwest, set CXSLAzi=3×π / 2; if it contains Northwest, set CXSLAzi=7×π / 4; otherwise, set CXSLAzi=0. B4. Parse QueryText to extract the query pitch angle CXSLEle: If QueryText contains an explicit pitch angle value, then set CXSLEle = pitch angle value × π / 180; otherwise, set the value of CXSLEle as follows: If QueryText contains overhead, direct overhead, or top views, set CXSLEle=75×π / 180; if it contains diagonally overhead or diagonally downward views, set CXSLEle=50×π / 180; if it contains eye-level, horizontal, or side views, set CXSLEle=10×π / 180; otherwise, set CXSLEle=45×π / 180. B5. Parse QueryText to extract query distance preference CXSLDistPref: If QueryText contains close-up or extreme close-up shots, set CXSLDistPref=0.6; if it contains long-distance or panoramic shots, set CXSLDistPref=0.2; otherwise, set CXSLDistPref=0.

4. B6. Construct CXSLVec using the parameters in CXSLAzi, CXSLEle, CXSLDistPref, and CropList; B7. Output CXSLOutput as the result of CXSLModel.

6. The method for storing and querying multi-angle crop images from a UAV according to claim 5, characterized in that: In B6, CXSLVec is constructed using parameters from CXSLAzi, CXSLEle, CXSLDistPref, and CropList, specifically as follows: CXSLVec[1]=sin(CXSLAzi); CXSLVec[2]=cos(CXSLAzi); CXSLVec[3]=sin(CXSLEle); CXSLVec[4]=cos(CXSLEle); CXSLVec[5]=CXSLDistPref; CXSLVec[6]=sin(CXSLEle)×0.8+0.1; CXSLVec[7] = CropType of CXSLInput / 10.0; if CXSLVec[7] is greater than 1.0, then set CXSLVec[7] = 1.0; otherwise, keep CXSLVec[7] unchanged; CXSLVec[8]=sin(CXSLAzi)×cos(CXSLEle)×0.7+0.15; If QueryText contains focus, alignment, or right face, then set CXSLVec[9]=0.9; otherwise, set CXSLVec[9]=0.5; CXSLVec[10] = CropCanopyR of CXSLInput / (CXSLDistPref × 10.0 + 0.5); If CXSLVec[10] is greater than 1.0, then set CXSLVec[10] = 1.0; otherwise, keep CXSLVec[10] unchanged; Among them, CXSLVec[ [This is the first in CXSLVec] Dimensional data.

7. The method for storing and querying multi-angle crop images from a UAV according to claim 6, characterized in that: The S4 call to ZSYMModel obtains the orthophoto encoded output, and the orthophoto encoded output is used to fill the associated edges of the crop image association graph structure CropGraph before outputting the result. Specifically: S401. Initialize the image traversal counter GraphCounter1=1; S402. Retrieve ImgPosX and ImgPosY from the first record of ImageList (GraphCounter1); initialize the nearest crop distance temporary storage GraphMinDist=999999; initialize the nearest crop ID temporary storage GraphMinCropID=0; initialize the crop traversal counter GraphCounter2=1; S403. Take the CropPosX and CropPosY of the GraphCounter2 record in CropList, and calculate the horizontal distance GraphDist. If GraphDist is less than GraphMinDist, set GraphMinDist=GraphDist and GraphMinCropID=CropID of the current record, and then execute S404. Otherwise, execute S404 directly. S404. Set GraphCounter2 = GraphCounter2 + 1; if GraphCounter2 is less than or equal to CropTotal, go to S403; otherwise, go to S405. Where CropTotal is the total number of crops in CropList; S405. If GraphMinDist is less than or equal to FocusDist, set ImgFocusCropID of the GraphCounter1 record in ImageList to GraphMinCropID; construct ZSYMInput using the crop position parameters corresponding to GraphMinCropID and the current image parameters, and call ZSYMModel to obtain ZSYMOutput; add the following elements to the CropVecList of the records in CropList where CropID is equal to GraphMinCropID: CVImgID = current ImgID, CVSemVec = ZSYMVec of ZSYMOutput, CVLinkType = 1, and then execute S406; otherwise, execute S406 directly. Where FocusDist is the focusing distance threshold; S406. Initialize the adjacent visible crop traversal counter GraphCounter3=1; S407. Retrieve the GraphCounter3 record from CropList; if the CropID in the GraphCounter3 record of CropList is equal to GraphMinCropID, then proceed to S409; otherwise, calculate the horizontal distance GraphAdjDist between the current crop and the current image; if GraphAdjDist is greater than AdjVisDist, then proceed to S409; otherwise, construct ZSYMInput using the position parameters of the current crop and the parameters of the current image, and call ZSYMModel to obtain ZSYMOutput; add the following elements to the CropVecList of the current crop: CVImgID = current ImgID, CVSemVec = ZSYMVec of ZSYMOutput, CVLinkType = 2, and then proceed to S408; S408. Adjacent visible association established, output multi-angle image association map centered on crop; S409. Set GraphCounter3 = GraphCounter3 + 1; if GraphCounter3 is less than or equal to CropTotal, go to S407; otherwise, go to S410. S410, Set GraphCounter1 = GraphCounter1 + 1; If GraphCounter1 is less than or equal to ImgTotal, go to S402; otherwise, go to S411. Where ImgTotal is the total number of images in ImageList.

8. The method for storing and querying multi-angle crop images from a UAV according to claim 7, characterized in that: The horizontal distance GraphDist in S403 is specifically as follows: 。 9. A method for storing and querying multi-angle crop images from a UAV according to claim 8, characterized in that: In step S5, the call to CXSLModel obtains the vectorized output corresponding to the user's query text. Based on CropGraph, vector similarity retrieval is performed on the vectorized output to output the most matching image. Specifically: S501. Parse QueryText to extract the target crop ID QueryCropID: Scan QueryText and use the integer in the combination of numbers and characters as QueryCropID; if there is no combination of numbers and characters, set QueryCropID=0. S502. If QueryCropID is greater than 0 and exists in CropList, then retrieve the values ​​of CropType and CropCanopyR of the current crop; otherwise, set CropType=1 and CropCanopyR=0.5; construct CXSLInput using QueryText, SemDim, CropType and CropCanopyR; call CXSLModel to obtain CXSLOutput, and set the query vector QueryVec=CXSLOutput's CXSLVec; S503. If QueryCropID is greater than 0, then search in the CropVecList of records in CropList where CropID is equal to QueryCropID: set search counter SearchCounter=1, and then go to S504; otherwise, go directly to S505. S504. Retrieve the CVSemVec and CVImgID of the SearchCounter-th element in CropVecList; Use the cosine similarity SearchScore between QueryVec and CVSemVec to add elements to QueryResultList based on SearchScore and CVImgID; If SearchCounter is less than or equal to the number of elements in CropVecList, go to S504; otherwise, go to S507. QueryResultList is the output list of query results. Each element in QueryResultList includes: QRImgID image number, QRScore matching score, and QRCropID associated crop number. S505. If QueryCropID equals 0, then search CropVecList for all crops in CropList one by one: establish a global crop traversal counter AllCropCounter=1; S506. Retrieve the CropVecList from the AllCropCounter record of CropList, calculate the cosine similarity between CVSemVec and CVImgID in CropVecList, and add it to QueryResultList; set AllCropCounter = AllCropCounter + 1; if AllCropCounter is less than or equal to CropTotal, go to S506, otherwise go to S507. S507. Sort the QueryResultList by QRScore from largest to smallest; set the output counter OutCounter=1; S508. Retrieve the QRImgID of the OutCounter record in QueryResultList; retrieve the record whose ImgID is equal to the current QRImgID from ImageList to obtain the complete information of the current image; retrieve the QRCropID of the OutCounter record in QueryResultList, retrieve the record whose CropID is equal to the current QRCropID from CropList to obtain the location CropPosX and CropPosY of the associated crop and the crop type CropType; output the OutCounter query result. The complete information for the current image includes: image file path, capture time (ImgTime), capture height (ImgAlt), and focus crop ID (ImgFocusCropID); The query results include: image ID QRImgID, matching score QRScore, associated crop ID QRCropID, image file path, and shooting parameters; S509. Set OutCounter = OutCounter + 1; if OutCounter is less than or equal to TopK and OutCounter is less than or equal to the number of elements in QueryResultList, then go to S508; otherwise, end the search.

10. A method for storing and retrieving multi-angle crop images from a UAV according to claim 9, characterized in that: In S504, the cosine similarity SearchScore between QueryVec and CVSemVec is used to add elements to QueryResultList based on SearchScore and CVImgID. Specifically: First, calculate the cosine similarity between QueryVec and CVSemVec: SearchScore = sum of the products of the corresponding dimensions of QueryVec and CVSemVec / (the modulus of QueryVec × the modulus of CVSemVec + 0.0001). If the CVLinkType of the SearchCounter-th element in CropVecList is equal to 1, then set SearchScore = SearchScore × 1.1; otherwise, keep SearchScore unchanged. Then, add the following elements to QueryResultList: QRImgID=CVImgID, QRScore=SearchScore, QRCropID=QueryCropID; SearchCounter=SearchCounter+1.