// Update is called once per frame void Update() { if (!PopCheckCurrentCamera.CheckCurrentCamera()) { return; } if (!mInputPrev || !mInputNext || !mMakeFeaturesShader || !mFeaturesPrev || !mFeaturesNext || !mTrackFeaturesShader || !mFeatureMatches ) { Debug.Log("FeatureMatcher not setup"); return; } // make features for both inputs mFeaturesPrev.DiscardContents(); mFeaturesNext.DiscardContents(); Graphics.Blit(mInputPrev, mFeaturesPrev, mMakeFeaturesShader); Graphics.Blit(mInputNext, mFeaturesNext, mMakeFeaturesShader); // match features mTrackFeaturesShader.SetTexture("FeaturesPrev", mFeaturesPrev); Graphics.Blit(mFeaturesNext, mFeatureMatches, mTrackFeaturesShader); FeatureTrackOptions Options = new FeatureTrackOptions(); Options.MaxResults = mMaxResults; mJoints = FeatureTracker.GetFeatureTracks(mFeatureMatches, ref mFeatureMatchesBuffer, Options); if (mCopyToPrev) { Graphics.Blit(mInputNext, mInputPrev); } }
static FeatureResults CalcFeaturePairs(Color32[] TrackedFeaturesData, int ImageWidth, int ImageHeight, FeatureTrackOptions Options) { FeatureResults Results = new FeatureResults(); // count matches for (int i = 0; i < TrackedFeaturesData.Length; i++) { if (TrackedFeaturesData [i].a < 1) { continue; } Results.mTotalResults++; if (Results.mMatches.Count >= Options.MaxResults) { break; } int y = i / ImageWidth; int x = i % ImageWidth; float Startu = x / (float)ImageWidth; float Startv = y / (float)ImageHeight; float Endu = (TrackedFeaturesData [i].r / 255.0f); float Endv = (TrackedFeaturesData [i].g / 255.0f); Vector4 Match = new Vector4(Startu, Startv, Endu, Endv); Results.mMatches.Add(Match); } return(Results); }
public static FeatureResults GetFeatureTracks(RenderTexture FeatureMatches, ref Texture2D FeatureMatchesBuffer, FeatureTrackOptions Options) { if (!FeatureMatches) { return(null); } if (!FeatureMatchesBuffer) { FeatureMatchesBuffer = new Texture2D(FeatureMatches.width, FeatureMatches.height, TextureFormat.ARGB32, false); } // extract data for debug rendering RenderTexture.active = FeatureMatches; FeatureMatchesBuffer.ReadPixels(new Rect(0, 0, FeatureMatches.width, FeatureMatches.height), 0, 0); FeatureMatchesBuffer.Apply(true); Color32[] FeatureMatchesData = FeatureMatchesBuffer.GetPixels32(); RenderTexture.active = null; FeatureResults Results = CalcFeaturePairs(FeatureMatchesData, FeatureMatchesBuffer.width, FeatureMatchesBuffer.height, Options); return(Results); }