কীভাবে প্রান্ত এবং আয়তক্ষেত্র সনাক্ত করা যায়


14

আমি চিত্রগুলিতে আয়তক্ষেত্র সনাক্ত করার চেষ্টা করি। চিত্রগুলির পটভূমি এক রঙের (বেশিরভাগ সময়)। আমি বাইনারি চিত্র (1 = পটভূমি, 0 = প্রান্ত) পেতে দুটি পদ্ধতি চেষ্টা করেছি, পরে একটি হুফ ট্রান্সফর্মেশন করার জন্য ...

  1. সোবেল বা ক্যানি ফিল্টার

  2. মসৃণ চিত্র এ, পার্থক্য চিত্র তৈরি করুন এ - গাউস, থ্রেশহোল্ড সহ বাইনারি চিত্র তৈরি করুন (হিস্টোগ্রাম তৈরি করুন, সর্বোচ্চ বিনটি পটভূমি হওয়া উচিত ...)

ফলাফলটি প্রান্তযুক্ত একটি বাইনারি চিত্র। আমি এখন আসলে কোন পদ্ধতিটি বিভিন্ন চিত্রের বিভিন্ন জন্য আরও ভাল কাজ করে তা জানি না। কোন ধারনা?


1
"আরও ভাল কাজ করে" বলতে কী বোঝ? ক্যানি এই ধরণের জিনিসটির জন্য খুব জনপ্রিয় তবে আপনি একবার কিনারা পাওয়ার পরে আপনি কী করার চেষ্টা করছেন তার উপর এটি নির্ভর করে। আপনি ঠিক কী অর্জন করতে চাইছেন?
পল আর

4
নতুন ব্যবহারকারীদের সম্প্রদায়ে তাদের প্রথম প্রশ্নের জন্য ভোটটি নেবেন না!

1
এই থ্রেডটি কার্যকর হতে পারে- dsp.stackexchange.com/ প্রশ্নগুলি
জিম ক্লে

এজ ডিটেক্টর ব্যাখ্যা করেছেন: dsp.stackexchange.com/q/74/1273
পেনেলোপ

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

উত্তর:


10

আমি একবার আয়তক্ষেত্র সনাক্তকরণের জন্য একটি আবেদন লিখেছি। এটি সোবেল প্রান্ত সনাক্তকরণ এবং লাইন হফ রূপান্তর ব্যবহার করেছে।

হাফ ইমেজের (লাইন) একক শিখর সন্ধানের পরিবর্তে প্রোগ্রামটি তাদের মধ্যে 90 ডিগ্রি দূরত্বের 4 টি পিক অনুসন্ধান করেছিল searched

হাফ ইমেজের প্রতিটি কলামের জন্য (কিছু কোণ অনুসারে), স্থানীয় ম্যাক্সিমার জন্য আরও তিনটি কলাম অনুসন্ধান করা হয়েছিল। চারটি কলামের প্রত্যেকটিতে যখন প্রশংসনীয় শিখরটি পাওয়া গেছে তখন আয়তক্ষেত্রটি সনাক্ত করা হয়েছে।

প্রোগ্রামটি আয়তক্ষেত্রটি তৈরি করেছিল এবং মিথ্যা ধনাত্মককে বৈষম্যমূলক করার জন্য আয়তক্ষেত্রের অভ্যন্তরে এবং বাইরে রঙের সামঞ্জস্যতার জন্য অতিরিক্ত চেক তৈরি করে। প্রোগ্রামটি ছিল কাগজের স্ক্যান শিটগুলিতে কাগজ স্থাপন সনাক্তকরণের জন্য।


5

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


2

আপনার পক্ষে এটি সহায়ক হতে পারে তবে আমি আজ এই সাইটটি ভিজিট করার সাথে সাথে অনেক দেরি হয়ে গেছে

        Bitmap bmp=new Bitmap(pictureBox1.Image);
        int x1=0, x2=0, y1=0, y2=0;            
        for (int i = 1; i < bmp.Height;i++ )
        {                
            for (int j = 1; j < bmp.Width;j++ )
            {
                if( bmp.GetPixel(j,i).R<7  &&  bmp.GetPixel(j-1,i).R>240  && bmp.GetPixel(j,i-1).R>240 ){

                    for (int k = j; k < bmp.Width - 1;k++ )
                    {

                        if ((bmp.GetPixel(k, i).R < 7) && (bmp.GetPixel(k+1, i).R > 240) && (k-j>30)) {
                            int count1 = 0;

                            for (int g = j; g < k;g++ ){
                                if(bmp.GetPixel(g,i).R<7){
                                    count1++;                                    
                                }
                            }//get total width

                         if(count1==k-j){                                 
                             x1 = j;
                             y1 = i;
                             x2 = k;
                         }
                        }
                    }
                         for (int a = i; a < bmp.Height - 1;a++ )
                         {
                             if ((bmp.GetPixel(j, a).R < 7) && (bmp.GetPixel(j, a+1).R > 240) && (a- i > 30)) {

                                 int count2 = 0;

                                 for (int x = i; x < a;x++ )
                                 {
                                     if(bmp.GetPixel(j,x).R<7){                                            
                                         count2++;
                                     }
                                 }


                                 if (count2 == (a - i))
                                 {

                                     y2 = a;
                                 }
                                 else {
                                     Console.WriteLine("check");
                                 }
                             }

                         }

                         if ((bmp.GetPixel(x2, y2).R < 7) && (bmp.GetPixel(x2 + 1, y2).R > 240) && (bmp.GetPixel(x2, y2+1).R > 240))
                         {

                             bool r1 = false;
                             bool r2 = false;
                             int count3 = 0;
                             for (int y = y1; y < y2;y++ )
                             {
                                 if(bmp.GetPixel(x2,y).R<7){
                                     count3++;                                     
                                 }
                             }

                             if (count3== y2 - y1) {
                                 r1 = true;
                             }                                
                             if(r1==true){
                                 int count4=0;
                                 for (int x = x1; x < x2;x++ )
                                 {
                                     if(bmp.GetPixel(x,y1).R<7){
                                         count4++;
                                     }
                                 }

                                 if(count4==x2-x1){
                                     r2 = true;
                                     Console.WriteLine("values :  X1 " + x1 + "   y1 :" + y1 + "   width : " + (x2 - x1) + "  height :  " + (y2 - y1));
                                     Pen pen = new Pen(Color.Red, 2);
                                     pictureBox1.CreateGraphics().DrawRectangle(pen, x1, y1, x2 - x1, y2 - y1);
                                 }                     
                             }
                            }

                }

                    }// initial point loop




                }// first if

2
ডিএসপি.স্ট্যাকেক্সচেঞ্জে স্বাগতম! :) যে কোনও উত্তর, এমনকি একটি দেরীও খুব স্বাগত, তবে আপনি যদি আপনার উত্তরটির সাথে কিছু প্রসঙ্গ সরবরাহ করেন তবে এটি দুর্দান্ত হবে। ব্যাখ্যাগুলি এবং উত্সগুলি সরবরাহ করে এমন উত্তরগুলি অগ্রাধিকার দেওয়া হয় - আপনি কি নিজের উত্তরটি সম্পাদনা করতে পারবেন, কোডটি কী করে তার কয়েকটি বাক্য লিখতে পারে এবং কীভাবে সমস্যাটি জিজ্ঞাসা করতে সহায়তা করবে, এবং উত্সটি উদ্ধৃত করে যদি তা আপনি না করেন? যদি আপনার উত্তরটি আরও ভাল করে তোলে। এছাড়াও, আপনার পরিচয় দয়া করে সম্পাদনা করুন - আমি চেষ্টা করেছি, তবে আপনার কোডের এক তৃতীয়াংশ পেরিয়ে আমি হারিয়ে গেলাম।
পেনেলোপ

0

যদি আপনার চিত্র তুলনামূলকভাবে পরিষ্কার হয়, আপনার প্রচুর বিরতি ছাড়াই সুস্পষ্ট আয়তক্ষেত্র রয়েছে হফ ট্রান্সফর্মের বিকল্পটি কনট্যুর তৈরি করা এবং সেগুলি হ্রাস করা যতক্ষণ না তারা একটি 4 পার্শ্বযুক্ত কনট্যুর = আপনার আয়তক্ষেত্র গঠন করে।

এটি করার জন্য ওপেনসিভি নমুনা রয়েছে


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.