簡體   English   中英

如何在EmguCV C#代碼中加速此圖像匹配代碼?

[英]How can I speed up this image matching code in EmguCV C# code?

這是代碼。 請參閱注釋行,以獲得可能進行優化的地方(在foreach )。 有人對提高速度有建議嗎?

public void FindMatches(Matrix<float> dbDescriptors, Matrix<float> queryDescriptors, ref IList<IndecesMapping> imap)
    {
        var indices = new Matrix<int>(queryDescriptors.Rows, 2); // matrix that will contain indices of the 2-nearest neighbors found
        var dists = new Matrix<float>(queryDescriptors.Rows, 2); // matrix that will contain distances to the 2-nearest neighbors found

        // create FLANN index with 4 kd-trees and perform KNN search over it look for 2 nearest neighbours
        var flannIndex = new Index(dbDescriptors, 4);
        flannIndex.KnnSearch(queryDescriptors, indices, dists, 2, 24);

        for (int i = 0; i < indices.Rows; i++)
        {
            // filter out all inadequate pairs based on distance between pairs
            if (dists.Data[i, 0] < (0.5 * dists.Data[i, 1]))
            {
                // find image from the db to which current descriptor range belongs and increment similarity value.
                // in the actual implementation this should be done differently as it's not very efficient for large image collections.
                foreach (var img in imap)
                {
                    if (img.IndexStart <= indices[i, 0] && img.IndexEnd >= indices[i, 0])
                    {
                        img.Similarity++;
                        break;
                    }
                }
            }
        }
    }

您可以通過如下更改foreach循環來改進工作:

 foreach (var img in imap)
            {
                if (img.IndexStart <= indices[i, 1] && img.IndexEnd >= indices[i, 1])
                {
                    img.Similarity++;
                    break;
                }
            }

那很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM