ইনপুট বৈশিষ্ট্য হিসাবে লাইনগুলি (পয়েন্টগুলির চেয়ে) বেশি করে থিয়েসন (ভোরোনাই) বহুভুজ তৈরি করছেন?


24

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

ইটিএ: জিওজিকের সমাধানটি আমার কাছে এসেছিল, তবে সরল বিভাগগুলিতে যেখানে ইনপুট লাইনগুলি কম উল্লম্ব রয়েছে, ফলস্বরূপ বহুভুজগুলি একটি লাইন খুব কাছাকাছি (এমনকি ওভারল্যাপিং) পায় যা তাদের উচিত নয়। এখানে, লাল রেখাগুলি আমার ইনপুট, আপনি তাদের থেকে উত্পন্ন উত্স এবং থিসেন বহুভুজ দেখতে পাবেন।

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

সম্ভবত একটি দ্রুত এবং (খুব) নোংরা সমাধান হতে পারে যে প্রতিটি লাইন সমান-ব্যবধানযুক্ত পয়েন্টগুলির (কেবলমাত্র লাইনটির উল্লম্বের পরিবর্তে) প্রচুর সেটে রূপান্তরিত করা যায়, সেগুলি থেকে থিয়েসন বহুভুজ তৈরি করা হবে, তারপরে উদ্ভূত রেখার আইডির ভিত্তিতে এগুলিকে দ্রবীভূত করুন।


4
পয়েন্টের সাথে লাইন বিভাগগুলি অন্তর্ভুক্ত ভোরোনাই চিত্রগুলি "বহুভুজ" দ্বারা গঠিত হয় না; বরং তাদের কোষের সীমানা রয়েছে যা প্যারাবোলার অংশগুলি অন্তর্ভুক্ত করতে পারে এই কারণে, ভোরোনাই টেসেললেশন তৈরির সবচেয়ে কার্যকর এবং সঠিক উপায়গুলির মধ্যে একটি হ'ল রাস্টার প্রতিনিধিত্ব ব্যবহার করা। ইএসআরআই এই পদ্ধতিটিকে ইউক্লিডিয়ান বরাদ্দ বলে
whuber

উত্তর:


11

একটি রাস্টার / চিত্র প্রক্রিয়াকরণের সমাধান চিত্রিত করার জন্য, আমি পোস্ট করা চিত্রটি দিয়ে শুরু করি। এটি নীল বিন্দু, ধূসর রেখাগুলি, রঙিন অঞ্চল এবং পাঠ্যের সুপারপজিশনের কারণে মূল ডেটার তুলনায় অনেক কম মানের; এবং মূল লাল রেখাগুলি ঘন হওয়া যেমন এটি একটি চ্যালেঞ্জ উপস্থাপন করে: তবুও, আমরা এখনও উচ্চ নির্ভুলতার সাথে ভোরোনাই কোষগুলি পেতে পারি।

আমি লাল চ্যানেল থেকে সবুজকে বিয়োগ করে এবং তারপরে তিন পিক্সেল দ্বারা উজ্জ্বল অংশগুলিকে বিচ্ছিন্ন করে এবং ক্ষয় করে লাল রেখাযুক্ত বৈশিষ্ট্যের দৃশ্যমান অংশগুলি বের করেছি। এটি ইউক্লিডিয়ান দূরত্ব গণনার ভিত্তি হিসাবে ব্যবহৃত হয়েছিল:

i = Import["http://i.stack.imgur.com/y8xlS.png"];
{r, g, b} = ColorSeparate[i];
string = With[{n = 3}, Erosion[Dilation[Binarize[ImageSubtract[r, g]], n], n]];
ReliefPlot[Reverse@ImageData@DistanceTransform[ColorNegate[string]]]

ত্রাণের প্লট

(এখানে দেখানো সমস্ত কোড গণিত 8)

সুস্পষ্ট "gesেউ" চিহ্নিতকরণ - যার মধ্যে অবশ্যই দুটি সংলগ্ন ভোরোনাই কোষ পৃথক করে এমন সমস্ত পয়েন্ট অন্তর্ভুক্ত থাকতে হবে - এবং লাইন স্তরটির সাথে তাদের আবার সংমিশ্রণ করা আমাদের অগ্রসর হওয়ার প্রয়োজনীয়তার বেশিরভাগ সরবরাহ করে:

ridges = Binarize[ColorNegate[
   LaplacianGaussianFilter[DistanceTransform[ColorNegate[string]], 2] // ImageAdjust], .65];
ColorCombine[{ridges, string}]

সম্মিলিত ছবি

লাল ব্যান্ডটি উপস্থাপন করে আমি লাইনটি কী সংরক্ষণ করতে পারি এবং সায়ান ব্যান্ড দূরত্বের রূপান্তরগুলিতে প্রচ্ছদগুলি দেখায়। (মূল লাইনে নিজেই বিচ্ছেদের কারণে এখনও প্রচুর পরিমাণে আবর্জনা রয়েছে rid) এগুলি আরও পরিষ্কার করার মাধ্যমে আরও পরিষ্কার করতে হবে - দুটি পিক্সেল করবে - এবং তারপরে আমরা সংযুক্ত অঞ্চলগুলি নির্ধারিত করতে পারি মূল লাইন এবং এগুলির মধ্যে gesেউগুলি (যার কয়েকটি স্পষ্টভাবে পুনরায় সংযুক্ত করার প্রয়োজন হয়):

Dilation[MorphologicalComponents[
  ColorNegate[ImageAdd[ridges, Dilation[string, 2]]]] /. {2 -> 5, 8 -> 0, 4 -> 3} // Colorize, 2]

বাস্তবে এটি যা অর্জন করেছে তা হ'ল পাঁচটিমুখী লিনিয়ার বৈশিষ্ট্যগুলি চিহ্নিত করা । আমরা তিনটি পৃথক রৈখিক বৈশিষ্ট্য দেখতে পাচ্ছি সঙ্গমের বিন্দু থেকে উদ্ভূত। প্রত্যেকের দুটি পক্ষ রয়েছে। আমি দুটি ডান দিকের বৈশিষ্ট্যগুলির সমান হিসাবে ডান দিকটি বিবেচনা করেছি তবে অন্যথায় সমস্ত কিছু আলাদা করে পাঁচটি বৈশিষ্ট্য দিয়েছি। রঙিন অঞ্চলগুলি এই পাঁচটি বৈশিষ্ট্য থেকে ভোরোনাই চিত্রটি দেখায়।

ফল

তিনটি রৈখিক বৈশিষ্ট্য (যা এই দৃষ্টান্তের জন্য আমার কাছে উপস্থিত ছিল না) পৃথক করে এমন একটি স্তরের উপর ভিত্তি করে ইউক্লিডিয়ান অ্যালোকেশন কমান্ড প্রতিটি লিনিয়ার বৈশিষ্ট্যের বিভিন্ন দিককে আলাদা করতে পারে না এবং তাই এটি সবুজ এবং কমলা অঞ্চলগুলিকে একত্রিত করবে বাম দিকের রেখার সমতল ; এটি ডানদিকের টিলের বৈশিষ্ট্যটিকে দুটি ভাগে ভাগ করবে; এবং এটি split বিভক্ত টুকরাগুলিকে তাদের অন্যদিকে সংশ্লিষ্ট বেইজ এবং ম্যাজেন্টা বৈশিষ্ট্যগুলির সাথে একত্রিত করবে।

স্পষ্টতই, এই রাস্টার পদ্ধতির বিনোদনের বৈশিষ্ট্যগুলি - পয়েন্ট, লিনিয়ার টুকরা এবং এমনকি বহুভুজগুলি, তার আকার নির্বিশেষে - এবং এটি লিনিয়ার বৈশিষ্ট্যগুলির পার্থক্যগুলি পৃথক করতে পারে - ভোরোনাই টেস্টলেশানগুলি নির্বিচারে বৈশিষ্ট্যগুলি তৈরি করার ক্ষমতা রাখে has


1
একটি অনুরূপ সমাধান ম্যাথমেটিকা.স্ট্যাকেক্সেঞ্জার / কুইকশানস / 20696/… তে চিত্রিত হয়েছে ।
whuber

5

আমি মনে করি আপনি করতে পারেন:

  • লাইন শীর্ষকে পয়েন্টগুলিতে রূপান্তর করুন (লাইন_পয়েন্ট)।
  • পয়েন্টগুলি (লাইন_পয়েন্ট) ব্যবহার করে ভোরোনাই বহুভুজ তৈরি করুন।
  • লাইন স্তর থেকে সংরক্ষণ করা হয়েছে এমন একটি আইডি অ্যাট্রিবিউট ব্যবহার করে বা লাইন লেয়ারের সাথে একটি স্থানিক জোড় ব্যবহার করে ফলস্বরূপ বহুভুজগুলি দ্রবীভূত করুন।

আমি আশা করি আপনার প্রশ্নটি আমি সত্যিই বুঝতে পেরেছি, যদি না পারে তবে আপনি আপনার প্রয়োজনীয়তা আরও ব্যাখ্যা করার জন্য একটি অঙ্কন সরবরাহ করতে পারেন।


2
আমি মনে করি আপনি এটি বুঝতে পেরেছিলেন, এবং সেই সমাধানটি আমার কাছে ঘটেছিল, তবে আপনি এমন সমস্যায় পড়েছেন যেখানে রেখাগুলির কম প্রশান্তি রয়েছে। আমি আমার প্রশ্নটি একটি স্ক্রিনশট দিয়ে আপডেট করব।
ড্যান সি

3
আপনি লাইন বরাবর পয়েন্টগুলি ঘন করে দিলে এটি ঠিকঠাক কাজ করবে। যদিও একজন রাস্টার ভিত্তিক পদ্ধতির (যেমন প্রশ্নের মন্তব্যে হুবুহু হিসাবে উল্লেখ করা হয়েছে) আমি সন্দেহ করব যে এর থেকে অনেক বেশি দক্ষ হবে।
অ্যান্ডি ডব্লিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.