اطلاعیه

Collapse
No announcement yet.

توصیف کننده ی SIFT

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

    #16
    پاسخ : توصیف کننده ی SIFT

    سلام ........................

    من با SIFT کار کردم .. امــا الان برام سوال پیش اومده .. اون رابطه ی اول که برای L تعریف میکنه میاد و Image رو با یه تابع Gaussian کانوالو میکنه .. میدونیم که تابع ما یه سیگما داره .. حالا در مرحله ی بعد؛ (منظورم s بعدیه ..) میان سیگما رو در یه K ضرب میکنن که خود این K میشه 2 به توان یک بر روی S .. یعنی K داره کوچیک میشه دیگه .. مگه غیر از اینه .. اگه اشتباه میکنم بگید .. پس تصاویر باید Sharp تر بشن .. نظر؟
    دوستان! مدتی کمتر به سایت میام ..

    دیدگاه


      #17
      پاسخ : توصیف کننده ی SIFT

      سلام
      طبق اون چیزی که شما می گید که ما در هر مرحله یک سیگما داریم که در k ضرب میشه واین k هم 2 به توان 1/s است که با زیاد شدن s این k کم میشه و بنابراین سیگمای اون مرحله (در هر اکتاو مراحل از smin تا smax است) هم کم میشه و تصویر شارپ تر میشه. اگه شما با این روند جواب گرفتید خوب ممکن کد مرحله اول یعنی محاسبه DOG و ماکزییم و می نیمم محلی رو بزارید تا من هم یک تستی بکنم. چون من قبلا این کار رو کردم و دیدم که خوب جواب نمی ده.
      در مورد بلورتر تصویر من هر جا مثال دیدم (تو چند فایل پاورپونت) دیدم که تصاویر بلورتر میشه. اگر چه استدلال شما درست است. همچنین در کد ای تو اینترنت است هم تصاویر بلورتر میشه. اگر چه در این کد اولا مقدار سیگما در هر مرحله (در هر اکتاو مراحل از smin تا smax است) افزایش پیدا می کنه ؟؟؟؟؟؟؟/ و ثانیا چون روی تصویر مرحله قبل می زنه این بلورتر شدن مضاعف میشه
      حالا من موندم که تو این مثال چرا اولا سیگما داره اضافه میشه و چرا روی تصویر مرحله قبل اعمال میشه؟؟؟؟؟؟؟ همون کدی که تو بخش های قبلی گذاشتید
      بهر حال اگه ممکن است کد مراحل اولیه رو بگذارید تا ما هم یک امتحانی کنیم
      من دشمن تو و عقاید تو هستم ولی حاضرم در راه آزادی عقیده ات جانم را فدا کنم. (ولتر)

      دیدگاه


        #18
        پاسخ : توصیف کننده ی SIFT

        سلام
        دوستان عزیز ! الان چه باید کرد . اگه شما می گید که با روش کم شدن سیگما جواب گرفتید خوب کد مرحله اول و دوم رو بزارید تا ما هم از اون استفاده کنیم و یا تست کنیم :applause:. یا یه نظری برای ادامه کار بدید :cry2:
        من دشمن تو و عقاید تو هستم ولی حاضرم در راه آزادی عقیده ات جانم را فدا کنم. (ولتر)

        دیدگاه


          #19
          پاسخ : توصیف کننده ی SIFT

          سلام .....................

          کدی که ضمیمه کردم Implementation آقای Vedaldi از SIFT هست .. لینک جزئیاتش هم گذاشتم .. امیدوارم مشکل برطرف بشه .. ببخشید حجم کد زیاد بود نتونستم ضمیمه کنم .. از همون لینک زیر دانلود کنید .. موفق باشید ..

          http://www.vlfeat.org/~vedaldi/code/sift.html
          دوستان! مدتی کمتر به سایت میام ..

          دیدگاه


            #20
            پاسخ : توصیف کننده ی SIFT

            سلام
            از کمک هاتون ممنون
            ولی من از کدی که در پست شماره 7 همین تایپیک گذاشتید چیز زیادی متوجه نشدم . در این کد یک فایل exe وجود دارد که با استفاده از اون میان keypoint ها رو پیدا می کنند و با بقیه توابع قرار داده شده میان کارهای دیگه مانند مچ کردن و مقایسه دو تصویر رو انجام می دند. در واقع کدی که بشه اون رو تحلیل کرد و ازش استفاده کرد وجود نداره. شما چطوری از این کد استفاده کردید. :surprised:
            درمورد کد آقای Vedaldi همونطوری که قبلا اشاره کردم یه مشکل وجود داره و اون اینه که امده توابع اصلی رو به صورت mex فایل قرار داده و نمی شه روند تابع رو تحلیل کرد چون فهمیدن برنامه mex فایل مشکل است. راهنمایی کنید
            :cry2:
            من دشمن تو و عقاید تو هستم ولی حاضرم در راه آزادی عقیده ات جانم را فدا کنم. (ولتر)

            دیدگاه


              #21
              پاسخ : توصیف کننده ی SIFT

              سلام ...................

              از بابت وقفه و تاخیر معذرت میخوام .. زیاد دست خودم نیست .. شرمنده .. کد زیر یه Implementation خوب دیگه برای SIFT هست .. من جدیدا از این استفاده کردم و جواب سریعتری از Lowe داشته .. چند نمونه از نتایج تستش هم براتون گذاشتم توی همین پست .. امیدوارم به خاطر تاخیر منو ببخشید .. موفق باشید ..

              تصاویر نمونه ..



              نتایج تصاویر ..





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

              دیدگاه


                #22
                پاسخ : توصیف کننده ی SIFT

                سلام ...................

                توی پست قبل اشاره کردیم که کد ضمیمه شده Keypoint هارو خیلی سریعتر حساب میکنه نسبت به کار Lowe .. امــا دلیلش رو دقیق نگفتیم .. در واقع کد بالا یه حالت Improved برای SIFT هست و خب طبیعتا از یک سری دقت ها صرف نظر شده .. برای نمونه تصویر زیر رو ببینید .. تصویر دست چپ کار Lowe هست و دست راستی هم کار Improved شده .. تفاوت هاش رو خیلی خوب ببینید .. موفق باشید ..

                دوستان! مدتی کمتر به سایت میام ..

                دیدگاه


                  #23
                  پاسخ : توصیف کننده ی SIFT

                  سلام ...
                  از همکاری هاتون ممنون
                  من می خوام یک گزارشی از چیزهایی که از SIFT متوجه شدم همراه با چند سوال رو بیان کنم...
                  در الگوریتم SIFT مراحل زیر انجام می شود !!!
                  1- اول میان و یک سری اکتاو از تصویر می سازن. که این اکتاو ها از نظر اندازه k برابر تصویر اصلی هستند (k=2,1,0.5,0.25)
                  2- در هر اکتاو میان و روی اون اکتاو چند فیلتر گوسی زنجیره ای با سیگما های خاص می زنند (به تعداد S (S بزرگ) تا )
                  سوال(1)؟؟؟؟؟؟؟: زدن فیلتر گوسی در این مرحله برای چه کاری است؟ (آیا برای پیدا کردن لبه هاست، اگه برای پیدا کردن لبه است میشه از فیلترهای دیگه استفاده کرد)
                  سوال (2)؟؟؟؟ : توی مقاله آقای lowe اومده نشون داده که بهترین تعداد S، برای تکرار پذیری و قابلیت تفکیک، 3 است (شکل (2)). منظور از این S چی است؟


                  3- در هر اکتاو میان DOG ها رو محاسبه می کنند (این DOG ها از تفریق 2 به 2 تصویرهای مرحله قبل در هر اکتاو به دست می آید). بنابراین در هر اکتاو S-1 تصویر DOG خواهیم داشت
                  4- در این مرحله میان در هر اکتاو و در بین تصاویر DOG ماکزیمم و می نیمم های محلی رو پیدا می کنند. این ماکزیمم و می نیمم محلی از تصویر DOG دومی تا تصویر یکی به آخر مونده اون در یک همسایگی 26 تایی جستجو میشه (طبق شکل زیر)

                  5- در مرحله بعد میان نقاطی که در مرحله قبل پیدا شدن و بعنوان keypoint معرفی میآ‌شوند رو اصلاح می کنند.
                  • حذف نقاطی که دارای contrast پایین هستند (نقاط flat). برای این کار می یاند از گرادیان استفاده می کنند. سوال (3)؟؟؟؟: چرا از گرادیان و رابطه زیر استفاده می کنند که از اون میاند برای پیدا کردن نقاط با contrast پایین استفاده می کنند.


                  • حذف نقاطی که به صورت ناچیز بر روی لبه قرار دارند. برای این کار میاند از ماتریس هسین استفاده می کنند. سوال(4)؟؟؟؟: چرا از ماتریس هسین و رابطه زیر استفاده می کنند که از اون برای پیدا کردن نقاطی که به صورت ناچیز بر روی لبه قرار دارد استفاده می کنند.

                  6- در مرحله بعد میان و یک orientation به هر keypoint نسبت می دند. (یا چند orientation ). به این صورت که در یک همسایگی w (مثلا همسایگی 8*8) از نقطه keypoint میان و میزان Gradient magnitude و Gradient orientation رو طبق روابط زیر محاسبه می کنند. بعد از محاسبه اونها رو با توجه به orientation در 36 بین قرار میدهند (هر بین 10 درجه رو پوشش می دهد) و اونهایی که در یک بین قرار می گیرند رو میان و Gradient magnitude اونها رو با هم جمع می کنند و در آخر کار اون orientation ای که دارای دامنه بزرگتری بود به عنوان orientation اون keypoint حساب می کنند. البته قبل از اینکه میزان Gradient magnitude و Gradient orientation رو حساب کنند میان این همسایگی رو در یک پنجره ضرب می کنند و یک وزن دهی انجام می دهند.
                  سوال(5)؟؟؟؟: این وزن دهی برای چی است؟

                  البته گاهی اوقات میان بعد از پیدا کردن ماکزیمم orientation، 80 درصد دامنه اون رو حساب می کنند و orientation های دیگه که از این مقدار بیشتر باشه به عنوان یک orientation دیگه این keypoint حساب می شود؟؟
                  سوال(6)؟؟؟: این کار برای چی است؟
                  ببخشید سوال زیاد شد. اگه فرصت ندارید کم کم جواب بدید.


                  من دشمن تو و عقاید تو هستم ولی حاضرم در راه آزادی عقیده ات جانم را فدا کنم. (ولتر)

                  دیدگاه


                    #24
                    پاسخ : توصیف کننده ی SIFT

                    سلام
                    من باید یک پروژه روی ASIFT انجام بدم. خیلی وقت کم دارم (تقریبا 2 هفته). من با SIFT شروع کردم ولی اصلا متوجه نمی شم که باید از کجا و چطور شروع کنم. از siftDemoV4 چیزی سر در نیاوردم. من این کد آقای حسین سلیمی رو دیدم ولی نمی فهمم چرا هیچ ماکزیمم یا می نیمم نشون نمی ده. لطفا راهنماییم کنین ممنون می شم.
                    ایمیل من : aria.ariaei2011@gmail.com











                    نوشته اصلی توسط eye of day
                    سلام از همکاری و کمک های موثرتون
                    برنامه که فرستاده بودم مشکل داشت.
                    من توی برنامه جدید اومدم ابتدا به تصویر در یک اکتاو خاص (کلا 3 تا اکتاو) در چند مرحله (کلا 5 مرحله (s از 1 تا 5)) با یک سیگمای k به توان 1 بر روی s بر روی تصویر یک فیلتر گوسی با تابع مطلب زدم (استفاده از تابع fspecial('gaussian',[3 3],K); برای ساختن فیلتر با یک سیگمای خاص (k) و استفاده از تابع conv2(Guss.octave{o}(:,:,s-1),h,'same' برای زدن فیلتر بر روی تصویر). در واقع در هر مرحله من روی تصویر حاصل از مرحله قبل فیلتر رو اعمال کردم.
                    نتایج رو هم نشون دادم. ولی در مرحله پیدا کردن ماکزییم و می نیمم محلی که من هر پیکسل رو با 26 همسایگی مقایسه می کنم که اگر از اونها بزرگتر بود و یا کوچکتر بود اون رو به عنوان ماکزیمم و می نیمم محلی انتخاب کنه (این کار رو با یک عالمه دستور if انجام دادم ( 26 تا if برای ماکزیمم و 26 تا if برای می نیمم )
                    در این مرحله برنامه من اصلا هیچی پیدا نمی کنه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟/

                    http://d01.megashares.com/dl/43e07a5/P_keypoint.m


                    %------------------------------------ In The Name Of God --------
                    % Editor : Hossein Salimi 88/4/1
                    % edit Project P3_keypoint()
                    % edit based on matlab code SIFT_ UCLA Vision Lab
                    %------------------------------------------------------------------
                    function Guss = P_keypoint()

                    %--------------------------
                    clc;
                    clear
                    %-----------------------
                    row = 256;
                    column = 256;
                    K = 2^(1/2);
                    o_min = 1;
                    s_min = 1;
                    s_max = 5;
                    o_max = 3;

                    %-------------
                    I = imread('F:\Image Processing\Thesis\Image Processing\Matlab Code\cameraman.tif'
                    I = double(I)/255.0;
                    base_image = imresize(I, [row column]);

                    O = 3;
                    [M,N] = size(base_image) ;

                    Guss.O = O ;
                    Guss.omin = o_min ;
                    Guss.smin = s_min ;
                    Guss.smax = s_max ;

                    % --------------------------------------------------------------------
                    % Octaves
                    % --------------------------------------------------------------------
                    for o=o_min_max
                    base_image = imresize(base_image, [ceil(row/(2^(o-1))) ceil(column/(2^(o-1)))]);
                    h=fspecial('gaussian',[3 3],K);
                    Guss.octave{o}(:,:,1) = conv2(base_image,h,'same'
                    for s=s_min+1:s_max
                    h=fspecial('gaussian',[3 3],K ^ (1/s));
                    Guss.octave{o}(:,:,s) = conv2(Guss.octave{o}(:,:,s-1),h,'same'
                    end
                    %=======================
                    figure;
                    subplot(3,2,1);imshow(base_image);
                    title('Orginal Image&#039
                    subplot(3,2,2);imshow(Guss.octave{o}(:,:,1));
                    title('Step1=(K ^ 1/s),s=1&#039
                    subplot(3,2,3);imshow(Guss.octave{o}(:,:,2));
                    title('Step1=(K ^ 1/s),s=2&#039
                    subplot(3,2,4);imshow(Guss.octave{o}(:,:,3));
                    title('Step1=(K ^ 1/s),s=3&#039
                    subplot(3,2,5);imshow(Guss.octave{o}(:,:,4));
                    title('Step1=(K ^ 1/s),s=4&#039
                    subplot(3,2,6);imshow(Guss.octave{o}(:,:,5));
                    title('Step1=(K ^ 1/s),s=5&#039
                    %=======================
                    end

                    % --------------------------------------------------------------------
                    % DOG
                    % --------------------------------------------------------------------
                    for o=o_min_max
                    [M,N,S] = size(Guss.octave{o}) ;
                    dogss.octave{o} = zeros(M,N,S-1) ;
                    for s=1:s_max-1
                    dogss.octave{o}(:,:,s) = ...
                    Guss.octave{o}(:,:,s+1) - Guss.octave{o}(:,:,s) ;
                    end
                    figure;
                    subplot(2,2,1);imshow(dogss.octave{o}(:,:,1));
                    subplot(2,2,2);imshow(dogss.octave{o}(:,:,2));
                    subplot(2,2,3);imshow(dogss.octave{o}(:,:,3));
                    subplot(2,2,4);imshow(dogss.octave{o}(:,:,4));
                    end
                    % ----------------------------------------------------------
                    % Local Max
                    % ----------------------------------------------------------
                    k=0;
                    for o=1:1_max
                    [M,N,S] = size(dogss.octave{o}) ;
                    for s=2:1:S-1
                    for i=2:1:M-1
                    for j=2:1:N-1
                    if ((...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j-1,s)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j,s)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j+1,s)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j-1,s)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j+1,s)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j-1,s)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j,s)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j+1,s)) && ...
                    ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j+1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j+1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j+1,s-1)) && ...
                    ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i-1,j+1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i,j+1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) > dogss.octave{o}(i+1,j+1,s+1))) ...
                    ...
                    || ...
                    ...
                    (...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j-1,s)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j,s)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j+1,s)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j-1,s)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j+1,s)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j-1,s)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j,s)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j+1,s)) && ...
                    ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j+1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j+1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j-1,s-1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j+1,s-1)) && ...
                    ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i-1,j+1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i,j+1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j-1,s+1)) && ...
                    (dogss.octave{o}(i,j,s) < dogss.octave{o}(i+1,j+1,s+1))))

                    k=k+1;
                    ix(k)=i;
                    iy(k)=j;
                    is(k)=s;
                    end
                    end
                    end
                    end
                    end
                    %++++++++++++++++++++

                    دیدگاه


                      #25
                      پاسخ : توصیف کننده ی SIFT

                      سلام
                      امیدوارم لینک زیر مفید باشه

                      http://mvip.iust.ac.ir/fa/seminar.html

                      دیدگاه


                        #26
                        پاسخ : توصیف کننده ی SIFT

                        با سلام و احترام خدمت همگی
                        اگه میشه در مورد توصیف کننده surf نیز با هم صحبت کنیم
                        و اینکه اگه میشه یکی که تسلط بیشتر تو این موضاعات داره آخرش یه جمع بندی از کل نظرات داشته باشه مثل همین کاری که تو sift صورت گرفت
                        با تشکر از همگی

                        دیدگاه


                          #27
                          پاسخ : توصیف کننده ی SIFT

                          سلام
                          برای اجرای برنامه کدوم یک از اون فایلهایی که داخل فایل zip هست را باید اجرا کرد
                          یک توضیح مختصر اگه امکانش هست بدین
                          با آرزوی موفقیت

                          نوشته اصلی توسط حسام الدین
                          سلام ...................

                          از بابت وقفه و تاخیر معذرت میخوام .. زیاد دست خودم نیست .. شرمنده .. کد زیر یه Implementation خوب دیگه برای SIFT هست .. من جدیدا از این استفاده کردم و جواب سریعتری از Lowe داشته .. چند نمونه از نتایج تستش هم براتون گذاشتم توی همین پست .. امیدوارم به خاطر تاخیر منو ببخشید .. موفق باشید ..

                          تصاویر نمونه ..



                          نتایج تصاویر ..






                          دیدگاه


                            #28
                            پاسخ : توصیف کننده ی SIFT

                            نوشته اصلی توسط حسام الدین
                            سلام ...................

                            توی پست قبل اشاره کردیم که کد ضمیمه شده Keypoint هارو خیلی سریعتر حساب میکنه نسبت به کار Lowe .. امــا دلیلش رو دقیق نگفتیم .. در واقع کد بالا یه حالت Improved برای SIFT هست و خب طبیعتا از یک سری دقت ها صرف نظر شده .. برای نمونه تصویر زیر رو ببینید .. تصویر دست چپ کار Lowe هست و دست راستی هم کار Improved شده .. تفاوت هاش رو خیلی خوب ببینید .. موفق باشید ..

                            با سلام و خسته نباشید.فایل زیپی رو که قرار دادین دانلود کردم و در برنامه از آن استفاده کردم و یه سوال واسم پیش اومده
                            تابع detect_features تنها محل Keypoint ها را می هد و خبری از Descriptor یا توصیف کننده آن نقاط وجود ندارد.آیا این برای توصیف کردن تصاویر کافیه ؟
                            پیشاپیش ممنون از لطفتون

                            دیدگاه

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