اطلاعیه

Collapse
No announcement yet.

line detection با کمک Hough Transform

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    line detection با کمک Hough Transform

    میشه بهم کمک کنید که چطوری میشه خط های یک تصویر را آشکار کرد..من مثال مطلب رو هم خوندم اما کمکی بهم نکرده

    ممنون.
    [pre]

    I = imread('tehran congestion.jpg'
    BW = rgb2gray(I);
    F = edge(BW,'horizontal','sobel'
    figure, imshow(F);
    [H,theta,rho] = hough(BW);
    figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,. ..
    'InitialMagnification','fit'
    xlabel('\theta (degrees)&#039, ylabel('\rho'
    axis on, axis normal, hold on;
    colormap(hot)
    P = houghpeaks(H,3,'threshold',ceil(0.3*max( H()));
    x = theta(P(:,2));
    y = rho(P(:,1));
    plot(x,y,'s','color','bla ck'
    lines = houghlines(BW,theta,rho,P,'FillGap',5,&# 039;MinLength',7);
    figure, imshow(I), hold on
    max_len = 0;
    for k = 1:length(lines)
    xy = [lines(k).point1; lines(k).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',2,&#039 ;Color','green'

    % Plot beginnings and ends of lines
    plot(xy(1,1),xy(1,2),'x','LineWidth ',2,'Color','yellow'
    plot(xy(2,1),xy(2,2),'x','LineWidth ',2,'Color','red'

    % Determine the endpoints of the longest line segment
    len = norm(lines(k).point1 - lines(k).point2);
    if ( len > max_len)
    max_len = len;
    xy_long = xy;
    end
    end
    [/pre]

    #2
    پاسخ : line detection با کمک Hough Transform

    سلام
    خوب من هم دارم بر روی تشخیص و البته یخورده تحلیل بیشتر بر روی خط توی یکسری تصویر خاص کار می کنم که هنوز جواب قطعی نگرفتم. یه مقاله هست که نمیدونم بهت کمک می کنه یا نه، مقاله خوبیه از نظر من:
    http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=4711831&url=http%3A %2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Fa rnumber%3D4711831

    دیدگاه


      #3
      پاسخ : line detection با کمک Hough Transform

      الگوریتم هاف: فرض کنید نقطه x,y در تصویر لبه ها روی یک خط باشد در نتیجه با فرض y=ax+b
      آنگاه الگوریتم برای هر نقطه x,y و برای تمام a ها ؛ مقدار b مطلوب را بدست می آورد b=y-ax
      و به آرایه arr[a][b] در محل a,b یکی اضافه میکند (پس باید فضا به a*b نقطه نگاشت شود)
      بعد از اتمام این مرحله هر مکان آرایه که بزرگتر باشد نشاندهنده اینست که خط بزرگتری با آن شیب a و عرض از مبدا b بر روی تصویر وجود دارد
      * این الگوریتم در خطوط عمودی مشکل دارد (شیب بی نهایت) در نتیجه برای رفع آن از مختصات قطبی rho , teta استفاده میشود

      دیدگاه


        #4
        پاسخ : line detection با کمک Hough Transform

        سلام. این برنامه ای هست که من برای تبدیل هاف نوشتم. کامل نیست و جوابش خیلی خوب نیست ولی شاید بهت ایده بده.
        http://eehadi.persiangig.com/image/Hough.rar
        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
        لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
        با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
        اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
        يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

        دیدگاه


          #5
          پاسخ : line detection با کمک Hough Transform

          سلام ..

          کدی که در پایان این پست ضمیمه شده، نمونه ی بسیار خوبی از پیاده سازی Hough Transform هست .. یک نمونه از تصویر ورودی و نتیجه ی خروجی ای که توسط این الگوریتم به دست میاد، رو میتونید در تصاویر زیر بررسی کنید .. برای اجرای مستقیم کد، میتونید از m.file ای که Hough_Grd نام داره، استفاده کنید .. فایل دیگری هم که ضمیمه ی این پست شده، یک مرور خیلی خلاصه از اونچیزی هست که در Hough Transform اتفاق میوفته .. امیدوارم که این فایل ها بتونن براتون مفید باشن .. موفق و سلامت و شاد باشید ..

          Sample_Input_Image




          Sample_Output_Result

          فایل های پیوست شده
          دوستان! مدتی کمتر به سایت میام ..

          دیدگاه


            #6
            پاسخ : line detection با کمک Hough Transform

            سلام ..

            فایلی که در انتهای این پست ضمیمه شده، کمی عمیق تر در مورد Hough Transform و کاربر این الگوریتم/تبدیل صحبت میکنه .. در این آدرس هم یک Demo بسیار خوب برای تبدیل هاف هست که نوع ارتباط بین مختصات کارتزین و مختصات پارامتریک رو به خوبی نشون میده و Intuition بسیار خوبی برای استفاده از این تبدیل به کاربر ارائه میده .. برای استفاده میتونید در صفحه ی کارتزین چندین نقطه ای که بر روی یک خط، قائم هستند رو ترسیم کنید و نوع ارتباط اونها رو در مختصات پارامتریک ببینید و این آزمایش رو با خطوط مختلف بررسی کنید .. امیدوارم که این Demo بتونه برای جمع بندی بحث های این قسمت مفید باشه .. موفق و سلامت و شاد باشید ..

            فایل های پیوست شده
            دوستان! مدتی کمتر به سایت میام ..

            دیدگاه


              #7
              پاسخ : line detection با کمک Hough Transform

              نوشته اصلی توسط هـادی
              سلام. این برنامه ای هست که من برای تبدیل هاف نوشتم. کامل نیست و جوابش خیلی خوب نیست ولی شاید بهت ایده بده.
              http://eehadi.persiangig.com/image/Hough.rar
              سلام.میشه در مورد برنامتون توضیح بدی.
              1/اون استانه ای که تو یک پست دیگه گفتی (در اینجا)همونr1 ,r2میشه؟
              2/این شعاعهای مابین r1,r2رو تشخیص میده؟یا دو تا استانه گرفتی؟(یکبار بزرگتر از r1 و یکبار بزرگتر ازr2 ها رو تشخیص بده؟
              3/این مقدار هایrرو خودت باتوجه به پیشفرضی که از شعاع سکه ها تعیین میکنی میدونی؟
              4/اون مقدار thetaکه گفتی از0تا 359هست رو از کجا تعیین کردی؟
              5/با شعاع یکبار28 و یکبار36.شکلش در حالتی که شعاع 36بود سکه ی کوچک رو نادیده گرفت.اما در حالت شعاع36،نقطه نورانی مرکز سکه خیلی نورانی تر بود.این یعنی چی؟مگه دقیقا محیط دایره رو تشخیص نمیده hough?
              6/گفتی با hough شمارش هم انجام میشه.خب اینجا الان با هاف چجوری میشه شمرد؟فقط تشخیص که انجام میشه؟(به استانه که گفتی ربطی نداشت.آستانه فقط دقت تشخیصمون رو کم و زیاد کرد) oo:
              هرگز توان خودت را در تغيير دادن خويش،دست كم نگير!
              هرگز توان خودت را در تغيير دادن ديگران،دست بالا نگير!

              http://www.eca.ir/forum2/index.php?topic=112772.0

              دیدگاه


                #8
                پاسخ : line detection با کمک Hough Transform

                سلام. این برنامه ها خیلی وقت قبل (حدود 2 سال) نوشته شده ولی تا جایی که یادم بیاد میگم:
                1- شعاع های سکه های کوچک و بزرگ هستند
                2- رک1
                3- بله
                4- مختصات قطبی
                5- مرکز دایره به آستانه گذاری پیدا میشه.
                6- آستانه کم بشه تعداد بیشتری پیدا می کنه و برعکس . در مورد این مثال چون دوایر کاملاً واضحن تعداد نتایج تقریباً مستقل از آستانه است.
                لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                دیدگاه


                  #9
                  پاسخ : line detection با کمک Hough Transform

                  نوشته اصلی توسط هـادی
                  6- آستانه کم بشه تعداد بیشتری پیدا می کنه و برعکس . در مورد این مثال چون دوایر کاملاً واضحن تعداد نتایج تقریباً مستقل از آستانه است.
                  خب حالا این تعداد نقاط نورانی که پیدا کرد رو چجوری بشمرم؟
                  منظورم از شمارش این قسمتش بود.
                  این نقاط چه ویژگی دارند که بتونم تو حلقه بذارم که هر وقت نقطه نورانی دید یکی اضافه کنه
                  7)ضمنا اگر شعاع شی یی که میخاوهیم تشخیص بدیم رو نداشته باشیم باید چکار کرد؟من برای گلبول های خونی که پرسیدم از استادم گفت شعاع لازه نیست بدی!! oo:
                  آستانه چجوری انتخاب میشه
                  هرگز توان خودت را در تغيير دادن خويش،دست كم نگير!
                  هرگز توان خودت را در تغيير دادن ديگران،دست بالا نگير!

                  http://www.eca.ir/forum2/index.php?topic=112772.0

                  دیدگاه


                    #10
                    پاسخ : line detection با کمک Hough Transform

                    یک آستانه میذاری و نقاطی که بیشتر از آستانه هستن تعدادش مشخصه.
                    7- باید مقداری اطلاعات اولیه از داده مثل حدود شعاعشون رو باید داشته باشی، از کوچکترین تا بزرگترین شعاع ممکن گلبولها در تصویر به ازای هر شعاع یک بار الگوریتم تکرار میشه.
                    بقیه اطلاعاتی که مفیدن به عنوان مثال حداقل فاصله بین دو گلبول میتونه کمک کنه تا موارد False Positive حذف بشن و ... .
                    آستانه گیری با سعی و خطا رو پیشنهاد می کنم. ممکنه داده ای که داری از نظر روشنایی طوری باشه که با مقادیر آستانه ای که در مقاله ای با داده متفاوت آورده شده نتیجه نده.
                    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                    لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                    با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                    اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                    يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                    دیدگاه


                      #11
                      پاسخ : line detection با کمک Hough Transform

                      نوشته اصلی توسط هـادی

                      7- باید مقداری اطلاعات اولیه از داده مثل حدود شعاعشون رو باید داشته باشی، از کوچکترین تا بزرگترین شعاع ممکن گلبولها در تصویر به ازای هر شعاع یک بار الگوریتم تکرار میشه.
                      اینجا گفتی حدود شعاعشون رو باید داشته باشم.یعنی تو برنامه بازه شعاعش رو بدم؟ولی پست قبلیت گفتی شعاعها رو دقیقا دادی.
                      8-تعدا تکرار الگوریتم به ازای هر شعاع که گفتی همون i تو برنامه ات هست؟
                      9-این آستانه که میگی بیشتر ازیک مقداری باشه،مشخص میکنه.آستانه رو نسبت به شعاع دایره انتخاب میکنند؟
                      10-گفتی مرکز با آستانه گذاری پیدا میشه یعنی هاف مرکز رو تشخیص میده یا خود دایره رو بالاخره
                      11-مقداری که تبدیل هاف میده،چه چیزو نشون میدهد؟
                      12-من این قسمت آستانه رو حتی از برنامه ت متوجه نمیشم که کدوم قسمتشه .میشه بگی؟؟؟
                      شاید سوال9تا12 ام همش یک جواب داشته باشه که همشون به متوجه نشدن آستانه مربوطه :angry:
                      13-تو برنامه ت rectangle چیه؟
                      هرگز توان خودت را در تغيير دادن خويش،دست كم نگير!
                      هرگز توان خودت را در تغيير دادن ديگران،دست بالا نگير!

                      http://www.eca.ir/forum2/index.php?topic=112772.0

                      دیدگاه


                        #12
                        پاسخ : line detection با کمک Hough Transform

                        در برنامه من r شامل دو مقدار = شعاع های سکه ها است که از قبل میدونستم(تعداد پیکسلهای شعاع سکه ها رو دستی حساب کردم) حالا به جای این باید یک محدوده از حداقل تا حداکثر شعاع ممکن رو قرار بدی.
                        8- منظور از تکرار چیه؟ الگوریتم برای هر شعاع یک بار انجام میشه طبق بالا.
                        9- بستگی داره، اگه همه دوایرت مشابه هستن (از نظر لبه و روشنایی) یک مقدار آستانه ثابت برای همه کفایت می کنه.
                        10- هر دایره با دو مقدار مشخص میشه: مرکز و شعاع. در تبدیل هاف، شعاع رو که خودمون میدیم، مرکز رو هم تبدیل برامون پیدا میکنه.
                        11- اساس کار تبدیل هاف به این صورته که برای هر پیکسل از تصویر با فرض این که این نقطه مرکز یک دایره به شعاع مشخص r هست روی مرز این دایره فرضی حرکت میکنه و به اندازه لبه های تصویر که در محیط دایره فرضی وجود دارند به مقدار اون نقطه (مرکز دایره فرضی) اضافه می کنه. حالا اگه این نقطه واقعاً مرکز دایرهه باشه مقدار خروجی تبدیل مقدار بزرگی میشه چون واقعاً محیطش شامل یک مرز واقعی در تصویر شده.
                        12- در اون برنامه چون تعداد سکه ها رو هم میدونستم فقط به تعداد نقاطی که مقدار تبدیل هاف ماکزیمم شده رو در نظر گرفتم به عنوان دایره های پیدا شده.
                        در برنامه تبدیل هاف خط هم، مقدار آستانه درصدی از ماکزیمم مقدار تبدیل هاف (که با SENSIVITY مشخص کردم) در نظر گرفته شده.
                        13- یک دستور متلبه که یک مستطیل در مختصات داده شده رسم می کنه.
                        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                        لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                        با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                        اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                        يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                        دیدگاه


                          #13
                          پاسخ : line detection با کمک Hough Transform

                          سلام.وقتی تشخیص با تبدیل هاف انجام بشه میتوان شمارش را با عملگرهای شکل شناسی انجام داد؟یا حتما باید با آستانه گذاری باشد؟
                          مثل لینک زیر:
                          http://mathworks.ir/matlab-learning/45-image-processing/228-image-processing-tutorial-part3
                          هرگز توان خودت را در تغيير دادن خويش،دست كم نگير!
                          هرگز توان خودت را در تغيير دادن ديگران،دست بالا نگير!

                          http://www.eca.ir/forum2/index.php?topic=112772.0

                          دیدگاه

                          لطفا صبر کنید...
                          X