দূরত্বের রূপান্তরের জন্য দ্রুততম অ্যালগরিদম


21

আমি দূরত্ব রূপান্তরের জন্য দ্রুততম উপলব্ধ অ্যালগরিদমটির সন্ধান করছি।

এই সাইটটি অনুসারে http://homepages.inf.ed.ac.uk/rbf/HIPR2/distance.htm , এটি বর্ণনা করে:

দূরত্ব রূপান্তরটি আরও দুটি দক্ষতার সাথে কেবল দুটি পাসে (যেমন রোজেনফিল্ড এবং ফাল্টজ 1968) চতুর অ্যালগরিদম ব্যবহার করে গণনা করা যায়।

আশেপাশে অনুসন্ধান করে, আমি পেয়েছি: "রোজেনফিল্ড, এ এবং ফাল্টজ, জে এল। 1968. ডিজিটাল ছবিগুলিতে দূরত্ব ফাংশন Pat প্যাটার্ন রিকগনিশন, 1, 33-61" "

তবে আমি বিশ্বাস করি যে ইতিমধ্যে 1968 এর তুলনায় আমাদের আরও ভাল এবং দ্রুত অ্যালগরিদম থাকা উচিত? আসলে, আমি 1968 থেকে উত্সটি খুঁজে পাইনি, সুতরাং কোনও সাহায্যের প্রশংসা করা হয়েছে।


এই থ্রেডটি আবার উঠার জন্য দুঃখিত, তবে আমি জিডিটিও বাস্তবায়নের চেষ্টা করছি, তবে পাইথন ব্যবহার করছি। Def__column (ডেটা ইনপুট): আউটপুট = জিরোস (ডেটা ইনপুট.শ্যাপ) এন = লেন (ডেটা ইনপুট) কে = 0 ভি = জিরোস ((এন,)) জে = জিরো ((এন + 1,)) ভি [0] = 0 জ [0] = -আইনফ z [1] = + ইনফ s = 0 ব্যাপ্তি (1, এন) এর জন্য: যদিও সত্য: এস = (((ডেটা ইনপুট [কিউ] + কিউ * কিউ)) - (ডেটা ইনপুট [ভি [কে] ]] + ভি [কে] * ভি [কে])) / (২.০ * কিউ - ২.০ * ভি [কে])) যদি এস <= জেড [কে]: কে - = 1 টি: ব্রেক কে + = 1 ভি [ কে] = কিউজেড [কে] = এসজেড [কে + 1] = রেফারেন্স (এন) এর জন্য ইনফ কে = 0: যখন জেড [কে + 1] <ক: কে + = 1 আউটপুট [q] = ((কিউ - ভি [কে]) * (কিউ - ভি [কে]) + ডেটা ইনপুট [ভি [কে]]) আউটপুট ফেরত যাইহোক অফার যখন
mkli90

একটি নতুন প্রশ্ন জিজ্ঞাসা করুন। উত্তর হিসাবে প্রশ্ন পোস্ট করবেন না।
এমবিএজ

সিগন্যাল প্রসেসিং এসই তে আপনাকে স্বাগতম। উপরের ডানদিকে "প্রশ্ন জিজ্ঞাসা" ব্যবহার করে আপনি একটি প্রশ্ন জিজ্ঞাসা করতে পারেন।
জোজেক

উত্তর:


14

পেড্রো এফ ফেলজেনসওয়ালব এবং ড্যানিয়েল পি। হটেনলোচার দূরত্ব পরিবর্তনের জন্য তাদের বাস্তবায়ন প্রকাশ করেছেন । আপনি এটি ভলিউম্যাট্রিক চিত্রগুলির জন্য ব্যবহার করতে পারবেন না তবে সম্ভবত আপনি 3 ডি ডেটা সমর্থন করার জন্য এটি প্রসারিত করতে পারেন। আমি এটি কেবল একটি কালো বাক্স হিসাবে ব্যবহার করেছি।


এটি কি ওপেনসিভিতে প্রয়োগ করা হয়েছে তা জানতে আপনি কি ঘটেন?
ম্যাট এম।

হ্যাঁ, নির্দিষ্ট মানের জন্য maskSizeএবং distanceType। দেখুন: opencv.willowgarage.com/docamentation/cpp/…
bjoernz

ভলিউম্যাট্রিক ইমেজগুলির (যেমন, গতিযুক্ত গভীরতার চিত্র) কোনও বাস্তবায়ন কি এখনও অবধি?
ঝাংক্সাওচেন

9

এই কাগজটিতে আধুনিক সমস্ত দূরত্বের রূপান্তরগুলি সম্পর্কে আলোচনা করা হয়েছে:

"2D ইউক্লিডিয় দূরত্ব রূপান্তরগুলির: একটি তুলনামূলক জরিপ", এসিএম কম্পিউটিং সার্ভের, ভোল 40, সংখ্যা 1, ফেব্রুয়ারী 2008 http://www.lems.brown.edu/~rfabbri/stuff/fabbri-EDT-survey-ACMCSurvFeb2008.pdf

কাগজটি মেইজস্টার, ইত্যাদি থেকে প্রযুক্তিটি উদ্ধৃত করে। অল। দ্রুততম সাধারণ উদ্দেশ্য হিসাবে, সঠিক রূপান্তর। এই কৌশলটি এখানে বিস্তারিত:

"লিনিয়ার টাইমে কম্পিউটারের দূরত্ব রূপান্তরকরণের জন্য একটি সাধারণ অ্যালগরিদম", এ। মাইজস্টার, জেবিটিএম রয়েরডিংক এবং ডাব্লুএইচ হেসেলিংক। http://fab.cba.mit.edu/classes/S62.12/docs/Meijster_distance.pdf

মেইজস্টার অ্যালগরিদমটি আমার ওপেন সোর্স এফেক্ট লাইব্রেরিতে ব্যবহৃত হয়: https://github.com/vinniefalco/LayerEffects

আমি আশা করি এটা কারো সাহায্যে লাগবে.


আপনার লাইব্রেরিতে আমরা নির্দিষ্ট কোডটি কোথায় খুঁজে পেতে পারি তা জানা দরকারী হবে।
akaltar

6

ফেলজেনসওয়াল্ড এবং হটেনলোচারের কাগজ অনুসারে 1D স্কোয়ার্ড ইউক্লিডিয়ান দূরত্বের রূপান্তরের জন্য একটি সি # কোড এখানে রয়েছে :

private static void DistanceTransform(double[] dataInput, ref double[] dataOutput)
{
    int n = dataInput.Length;

    int k = 0;
    int[] v = new int[n];
    double[] z = new double[n + 1];

    v[0] = 0;
    z[0] = Double.NegativeInfinity;
    z[1] = Double.PositiveInfinity;

    double s;

    for (int q = 1; q < n; q++)
    {
        while (true)
        {
            s = (((dataInput[q] + q * q) - (dataInput[v[k]] + v[k] * v[k])) / (2.0 * q - 2.0 * v[k]));

            if (s <= z[k])
            {
                k--;
            }
            else
            {
                break;
            }
        }

        k++;

        v[k] = q;
        z[k] = s;
        z[k + 1] = Double.PositiveInfinity;
    }

    k = 0;

    for (int q = 0; q < n; q++)
    {
        while (z[k + 1] < q)
        {
            k++;
        }

        dataOutput[q] = ((q - v[k]) * (q - v[k]) + dataInput[v[k]]);
    }
}

এটি বাইনারি এবং গ্রেস্কেল চিত্রগুলির জন্য প্রথমে চিত্র কলামগুলিতে প্রয়োগ করে এবং তারপরে সারিগুলিতে (বা বিপরীতে অবশ্যই) ব্যবহার করা যেতে পারে।

রূপান্তরটি আসলেই খুব দ্রুত।

উত্স এবং আউটপুট চিত্র এখানে:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

কালো পিক্সেলের মান 0 এবং সাদাগুলির কিছু বড় মান রয়েছে (চিত্রগুলিতে সম্ভাব্য বৃহত্তম স্কোয়ার দূরত্বের চেয়ে বড় হতে হবে তবে অনন্ত নয়) যাতে ট্রান্সফর্মটি কালো পিক্সেল থেকে দূরত্বে ফিরে আসে এবং সাদাগুলি বাদ যায়।

সত্য ইউক্লিডিয়ান দূরত্বের রূপান্তর পেতে, আউটপুট চিত্র থেকে প্রতিটি পিক্সেলের একটি বর্গমূল নিন।


মজাদার. দূরত্বে রূপান্তরের সাধারণ ব্যবহার কী?
স্পেসি

1
আমি মনে করি সাধারণ ব্যবহারগুলি হ'ল পথ, বিভাজন, জ্যামিতিক পরিমাপ (ভর কেন্দ্রে) এবং প্রভাবগুলি (বেভেল এফেক্ট) in জ্যামিতিকভাবে অনুকূল ব্লেন্ডিং মাস্কটি খুঁজতে - আমার প্যানোরামিক ইমেজ সেলাইয়ের জন্য দূরত্বের রূপান্তর প্রয়োজন। এর মধ্যে প্রতিটি চিত্রের চলমান দূরত্বকে রূপান্তর করা এবং তারপরে ওজনগুলি থেকে মিশ্রণের মুখোশটি সংযুক্ত করা জড়িত।
লিবার

1
দূরত্ব রূপান্তরটি [প্রান্ত] চিত্রগুলির সাথে মিলিয়ে ব্যবহার করা যেতে পারে, একটি কৌশল হ'ল "চ্যাম্পার ম্যাচিং" ( umiacs.umd.edu/~mingyliu/papers/liu_cvpr2010.pdf )। ডিটিটি মিডিয়াল অক্ষগুলি (কঙ্কাল) সন্ধান করতে এবং অন্যান্য কাজের যেমন লিওবারের উল্লেখ হিসাবে সম্পাদন করতে ব্যবহার করা যেতে পারে।
রিথুঙ্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.