এই থ্রেডের অন্য কোথাও, ব্যবহারকারী 1149913 একটি শক্তিশালী পদ্ধতির (ইএম অনুমান) জন্য দুর্দান্ত পরামর্শ (একটি সম্ভাব্য মডেল সংজ্ঞায়িত) এবং কোড সরবরাহ করে। দুটি বিষয় বিবেচনা করা বাকি:
সম্ভাব্য মডেল থেকে প্রস্থানগুলি কীভাবে মোকাবেলা করতে হবে (যা ২০১১-২০১২ এর ডেটাতে খুব স্পষ্ট এবং কম-opালু পয়েন্টগুলির অপ্রকাশে কিছুটা প্রকট)।
EM অ্যালগরিদম (বা অন্য কোনও অ্যালগোরিদম) এর জন্য শুরু করার মানগুলি কীভাবে চিহ্নিত করা যায়।
# 2 ঠিকানার জন্য, একটি হফ ট্রান্সফর্ম ব্যবহার বিবেচনা করুন । এটি একটি বৈশিষ্ট্য-সনাক্তকরণ অ্যালগরিদম যা বৈশিষ্ট্যগুলির রৈখিক প্রসারগুলি সন্ধানের জন্য দক্ষতার সাথে রেডন ট্রান্সফর্ম হিসাবে গণনা করা যায় ।
এক্সYx , yহাফ রূপান্তর মধ্যে। মূল প্লটের বৈশিষ্ট্যগুলি যখন একটি সাধারণ লাইন বরাবর পতিত হয় বা একের কাছাকাছি হয়, তখন তারা হাফ রূপান্তরগুলিতে উত্পন্ন কার্ভগুলির সংগ্রহগুলিতে সেই সাধারণ লাইনের সাথে মিল রেখে একটি সাধারণ ছেদ থাকে। হফ ট্রান্সফর্মের সবচেয়ে তীব্রতার এই পয়েন্টগুলি সন্ধান করে আমরা মূল সমস্যার ভাল সমাধানগুলি পড়তে পারি।
এই ডেটা দিয়ে শুরু করতে, আমি প্রথমে সহায়ক জিনিসগুলি (অক্ষ, টিক চিহ্ন এবং লেবেল) বের করেছিলাম এবং ভাল পরিমাপের জন্য নীচের ডানদিকে স্পষ্টতই বাহ্যিক পয়েন্টগুলি ছাঁটাই এবং নীচের অক্ষটি বরাবর ছিটিয়েছি। (যখন সেই জিনিসগুলি ক্রপ না করা হয়, প্রক্রিয়াটি এখনও কার্যকরভাবে কাজ করে তবে এটি অক্ষ, ফ্রেম, টিক্সের লিনিয়ার সিকোয়েন্সগুলি, লেবেলের লিনিয়ার ক্রমগুলি এবং নীচের অক্ষে বিক্ষিপ্তভাবে পড়ে থাকা পয়েন্টগুলিও সনাক্ত করে!)
img = Import["http://i.stack.imgur.com/SkEm3.png"]
i = ColorNegate[Binarize[img]]
crop2 = ImageCrop[ImageCrop[i, {694, 531}, {Left, Bottom}], {565, 467}, {Right, Top}]
(এটি এবং বাকী কোডটি ম্যাথামেটিকায় রয়েছে ))
এই চিত্রের প্রতিটি বিন্দুর সাথে হফ ট্রান্সফর্মে সংক্ষিপ্ত রেখাচিত্রের সাথে মিল রয়েছে, এখানে দৃশ্যমান। তারা সাইন ওয়েভ:
hough2 = Radon[crop2, Method -> "Hough"] // ImageAdjust
এটি দৃষ্টিগোচরভাবে সেই ভাবটি প্রকাশ করে যাতে প্রশ্নটি একটি লাইন ক্লাস্টারিং সমস্যা: হফ রূপান্তর এটি এটিকে হ্রাস করে পয়েন্ট ক্লাস্টারিং সমস্যায় , যার কাছে আমরা আমাদের পছন্দ মতো কোনও ক্লাস্টারিং পদ্ধতি প্রয়োগ করতে পারি।
এই ক্ষেত্রে, ক্লাস্টারিং এতটাই পরিষ্কার যে হফ ট্রান্সফর্মের সাধারণ পোস্ট প্রসেসিং যথেষ্ট। রূপান্তরটিতে সর্বাধিক তীব্রতার অবস্থানগুলি সনাক্ত করতে, আমি বিপরীতে বৃদ্ধি পেয়েছি এবং প্রায় 1% ব্যাসার্ধের মধ্যে রূপান্তরটি ঝাপসা করেছি: এটি মূল চিত্রের প্লট পয়েন্টগুলির ব্যাসগুলির সাথে তুলনীয়।
blur = ImageAdjust[Blur[ImageAdjust[hough2, {1, 0}], 8]]
ফলাফলটি থ্রোসোল্ডিং করে এটিকে দুটি ছোট ব্লবগুলিতে সংকুচিত করেছিল যার সেন্ট্রয়েডগুলি যুক্তিসঙ্গতভাবে সর্বশ্রেষ্ঠ তীব্রতার পয়েন্টগুলি চিহ্নিত করে: এইগুলি লাগানো রেখাগুলির অনুমান করে।
comp = MorphologicalComponents[blur, 0.777]) // Colorize
0,777
চিত্রের বাম দিকটি 0 ডিগ্রি (অনুভূমিক) এর দিকের সাথে মিলে যায় এবং আমরা বাম থেকে ডানদিকে যেমন দেখতে পাই, সেই কোণটি লাইনরেটিকভাবে 180 ডিগ্রি পর্যন্ত বৃদ্ধি পায়। ইন্টারপোলটিং, আমি গণনা করি যে দুটি ব্লবটি যথাক্রমে 19 এবং 57.1 ডিগ্রি কেন্দ্রিক। আমরা ব্লবগুলির উল্লম্ব অবস্থানগুলি থেকে বিরতিগুলিও পড়তে পারি। এই তথ্যটি প্রাথমিক ফিটগুলি দেয়:
width = ImageDimensions[blur][[1]];
slopes = Module[{x, y, z}, ComponentMeasurements[comp, "Centroid"] /.
Rule[x_, {y_, z_}] :> Round[((y - 1/2)/(width - 1)) 180., 0.1]
]
{19., 57.1}
অনুরূপ ফ্যাশনে কেউ এই fitsালগুলির সাথে সম্পর্কিত ইন্টারসেপ্টগুলি গণনা করতে পারে, এই ফিটগুলি দেয়:
(লাল রেখাটি আগের ছবিটির ক্ষুদ্র গোলাপী বিন্দুর সাথে মিলে যায় এবং নীল রেখাটি বৃহত্তর অ্যাকোয়া ব্লবের সাথে মিলে যায়))
অনেকাংশে, এই পদ্ধতির সাথে স্বয়ংক্রিয়ভাবে প্রথম ইস্যুটি মোকাবেলা করা হয়েছে: রৈখিকতা থেকে বিচ্যুতি সর্বাধিক তীব্রতার পয়েন্টগুলি প্রকাশ করে, তবে সাধারণত সেগুলি খুব বেশি স্থানান্তর করে না। স্পষ্টভাবে আউটলাইং পয়েন্টগুলি হফ রূপান্তর জুড়ে নিম্ন-স্তরের শব্দকে অবদান রাখবে, যা পোস্ট-প্রসেসিং প্রক্রিয়া চলাকালীন অদৃশ্য হয়ে যাবে।
এই মুহুর্তে ইএম অ্যালগরিদমের জন্য বা কোনও সম্ভাবনা মিনিমাইজারের (যা ভাল অনুমান দেওয়া হয়, দ্রুত রূপান্তরিত হবে) এর জন্য প্রাথমিক মান হিসাবে এই অনুমানগুলি সরবরাহ করতে পারে। তবে এর থেকে ভাল, শক্তিশালী রিগ্রেশন প্রাক্কলনকারী ব্যবহার করা যেমন পুনরাবৃত্তভাবে কমপক্ষে স্কোয়ারগুলি পুনরায় দেখা যায় । এটি প্রতিটি পয়েন্টে একটি রিগ্রেশন ওজন সরবরাহ করতে সক্ষম । নিম্ন ওজন নির্দেশ করে যে বিন্দু একটি লাইনের সাথে "অন্তর্গত" নয়। প্রতিটি ওজনকে তার যথাযথ লাইনে নির্ধারিত করার জন্য, এই ওজনগুলি অনুসন্ধান করুন। তারপরে, পয়েন্টগুলি শ্রেণিবদ্ধ করে, আপনি পয়েন্টের দুটি গ্রুপে পৃথকভাবে সাধারণ ন্যূনতম স্কোয়ার (বা অন্য কোনও রিগ্রেশন পদ্ধতি) ব্যবহার করতে পারেন।