اطلاعیه

Collapse
No announcement yet.

تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

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

    تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

    سلام دوستان خیلیآ‌ ممنون میشم اگه در این مورد منو راهنمای کنید

    کودی که توسط آن بتوان ۱۰ عکس در ابعاد ۵۱۲*۵۱۲ را خواند و آنهارا به ۱۶ قطعه عکس در ابعاد ۱۲۸*۱۲۸ تقسیم نمود و به تک تکآ‌شان نامیآ‌ را اختصاص دهیم و در پوشهآ‌ای دیگر ذخیره کنیم

    #2
    پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

    سوالتون رو در مورد تبدیل 10 عکس به 16 عکس واضح تر بگین.

    درمورد تغییر ابعاد عکس هم میتوانید به شکل زیر عمل کنید


    for i=1: 10
    im=imread('address&#039
    a=imresize(im,.5);
    imwrite(a,strcat(cd,'\1\resizedpic_',int 2str(i),'.jpg&#039);

    end

    توجه داشته باشین که مقدار عددی موجود در imresize مشخص کننده میزان کوچک شدن یا بزرگ شدن تصویر می باشد.
    در قسمت imwrite هم میتوانید مسیر ذخیره شدن را مشخص کنید.

    دیدگاه


      #3
      پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

      با تشکر بابت پاسختون
      در واقع میخواهیم که ۱۰ عکس که در ابعاد ۵۱۲*۵۱۲ هستند قطعه قطعه شوند یعنیآ‌ از pixel اول تا ۱۲۸ یک قطعه و از ۱۲۸ تا۲۵۶ یه قطعه و تا آخر یعنیآ‌ این عکس ۵۱۲*۵۱۲ به ۱۶ عکس ۱۲۸*۱۲۸ تقسیم شود

      دیدگاه


        #4
        پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آن&#160

        شما میتونید از دستور imcrop استفاده کنین. بدین شکل که در یک حلقه ابتدا عکس رو می خونید سپس با استفاده از این دستور تعین میکنین چه قسمتی از عکس crop شود. پس شما میتونین با دو حلقه تو در تو این کار را با دستور فوق انجام بدین البته با یک حلقه هم انجام میشه.
        imcrop(im, [xmin ymin width height]) d
        این هم خود دستور مورد نظر برای استفاده شما.
        موفق باشین.

        اگر راه حل آسونتری باشه خوشحال میشم دوستان مطرح کنن.

        دیدگاه


          #5
          تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸

          با سلام .... :smile:

          با تشکر از پاسختون ..... :agree:


          من تقریبا همین جوری که گفتید نوشتم البته عکس من 200*200 هست و مثلا میخواد به 16 قطعه تقسیم بشه ..

          من همه این 16 قطعه رو داخل یه آرایه سلولی ذخیره کردم ....ولی همه ماتریس ها با هم برابر نیست !!! ....

          نمیدونم باید چه جوری بنویسم که همه قطعه ها سایزشون برابر بشه ....شکل اش هم گذاشتم ....

          این هم عکس ....البته گری اش کردم .... حالا خیلی مهم نیست ....




          این هم برنامه :





          این هم ارایه سلولی که قطعه ها داخلش هست ولی با سایز نابرابر !! البته هر 16 تاش رو نذاشتم ....





          حالا اگه بخوایم بهم بچسبونیم و دوباره اولی رو بسازیم باید چی کار کنیم ؟؟؟

          یعد یه سوال دیگه توی همین کدی که شما نوشتید این آدرس چیه ؟؟ اگه با توجه به حلقه گویا هدف پوشه ی

          حاوی تصاویر هست ولی خوب تابع imread که نمیتونه وردی ادرس یه فایل رو بگیره و عکس های اون رو بخونه ....

          اگه هم که ادرس یه تصویر باشه که دیگه اون for گذاشتنش فکر کنم یه جورایی بیهوده هست ...

          کد:
          for i=1: 10
          im=imread('address')
             a=imresize(im,.5);
             imwrite(a,strcat(cd,'\1\resizedpic_',int2str(i),'.jpg'));
            
          end
          مصادیق اظهار محبت به همسر
          بررسی مسائل جنسی در زندگی زناشویی(فایل صوتی)
          ویژگی های خانواده سالم - مصادیق احترام (فایل صوتی)
          اثر قصه گویی برای کودکان

          دیدگاه


            #6
            پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

            سلام بازهم ممنون از راهنماییتون
            من از کد شما استفاده کردم و کاملا جواب گرفتم فقط در قسمت imwrite مشکل دارم
            می شه بیشتر راهنمایی کنید لطفا

            دیدگاه


              #7
              پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

              کدی که استفاده می کنم اینه که در قسمت imwrite
              error دارد
              function [ ] = generateImg( )
              location=('C:\Users\AlmasComputer\Documents\M ATLAB\image\first\'
              Im=dir([location,'*.tif']);
              for p=1:size(Im)
              img=imread([location Im(p).name]);
              img=img(:,:,1);
              k=0;
              for i=0:128:384
              for j=0:128:384
              k=k+1;
              g=imcrop(img,[j i 128 128]);
              for t=0:160
              imwrite(g,strcat(cd,'C:\Users\AlmasComputer\D ocuments\MATLAB\image\train\',int2str(t),&#03 9;.tif&#039);
              end
              end
              end


              end

              دیدگاه


                #8
                پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸

                نوشته اصلی توسط _مریم زارع _
                با سلام .... :smile:

                با تشکر از پاسختون ..... :agree:


                من تقریبا همین جوری که گفتید نوشتم البته عکس من 200*200 هست و مثلا میخواد به 16 قطعه تقسیم بشه ..

                من همه این 16 قطعه رو داخل یه آرایه سلولی ذخیره کردم ....ولی همه ماتریس ها با هم برابر نیست !!! ....

                نمیدونم باید چه جوری بنویسم که همه قطعه ها سایزشون برابر بشه ....شکل اش هم گذاشتم ....

                این هم عکس ....البته گری اش کردم .... حالا خیلی مهم نیست ....




                این هم برنامه :





                این هم ارایه سلولی که قطعه ها داخلش هست ولی با سایز نابرابر !! البته هر 16 تاش رو نذاشتم ....





                حالا اگه بخوایم بهم بچسبونیم و دوباره اولی رو بسازیم باید چی کار کنیم ؟؟؟

                یعد یه سوال دیگه توی همین کدی که شما نوشتید این آدرس چیه ؟؟ اگه با توجه به حلقه گویا هدف پوشه ی

                حاوی تصاویر هست ولی خوب تابع imread که نمیتونه وردی ادرس یه فایل رو بگیره و عکس های اون رو بخونه ....

                اگه هم که ادرس یه تصویر باشه که دیگه اون for گذاشتنش فکر کنم یه جورایی بیهوده هست ...

                کد:
                for i=1: 10
                im=imread('address')
                   a=imresize(im,.5);
                   imwrite(a,strcat(cd,'\1\resizedpic_',int2str(i),'.jpg'));
                  
                end
                درود بر شما.
                ببینین اگه اندازه ها درست نیست شما باید اعداد imcrop رو درست انتخاب کنین و حداقل میتونین آزمون خطا داشته باشین تا بهتر با این دستور کار کنین.
                اصلاشما میتونین کار دیگری هم کنین.
                for i:1150
                temp=imageGray(i:i+50, i:i+50); k
                imwrite(temp,filename); k
                end
                از برعکس همین روش فوق هم میتونین برای درست کردن تصویر اولیه تون استفاده کنین.
                در مورد imread. شما تصاویر داخل فولدر رو تغییر نام بدین به صورت زیر: walk_1.jpg, walk_2.jpg, walk_3.jpg و الا آخر
                حالا در حلقه بدین شکل بنویسید
                for i=1:10
                im=imread(strcat(cd, '\walk_' , int2str(i), '.jpg' k
                imshow(im); k
                pause(.005); k
                end

                نکات: دستور cd دایرکتوری جاری رو برمیگردونه
                در ضمن براحتی از همین ترفند میتونین برای دستور imwrite هم استفاده کنین.
                پیروز باشین.

                دیدگاه


                  #9
                  پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

                  نوشته اصلی توسط minaaaHA
                  کدی که استفاده می کنم اینه که در قسمت imwrite
                  error دارد
                  function [ ] = generateImg( )
                  location=('C:\Users\AlmasComputer\Documents\M ATLAB\image\first\'
                  Im=dir([location,'*.tif']);
                  for p=1:size(Im)
                  img=imread([location Im(p).name]);
                  img=img(:,:,1);
                  k=0;
                  for i=0:128:384
                  for j=0:128:384
                  k=k+1;
                  g=imcrop(img,[j i 128 128]);
                  for t=0:160
                  imwrite(g,strcat(cd,'C:\Users\AlmasComputer\D ocuments\MATLAB\image\train\',int2str(t),&#03 9;.tif&#039);
                  end
                  end
                  end


                  end

                  درود بر شما
                  همیشه لطف بفرمایین متن پیام خطا رو هم بزارین. اینطور بهتره.
                  1-دستور imwrite رو از داخل حلقه خارج کن.اصلا لزومی نداره در کد شماداخل حلقه باشد.

                  function [ ] = generateImg( )
                  location=('C:\Users\AlmasComputer\Documents\M ATLAB\image\first\'
                  Im=dir([location,'*.tif']);
                  for p=1:size(Im)
                  img=imread([location Im(p).name]);
                  img=img(:,:,1);
                  k=0;
                  for i=0:128:384
                  for j=0:128:384
                  k=k+1;
                  g=imcrop(img,[j i 128 128]);
                  imwrite(g,strcat('C:\Users\AlmasComputer\Docu ments\MATLAB\image\train\',int2str(t),'. tif&#039);
                  end
                  end

                  شما همزمان هم از دستور cd استفاده کردین هم دوباره آدرس رو دستی وارد کردین که خوب طبیعتا باید خطا بده.
                  من کدتون رو اصلاح کردم.امیدوارم قسمت ذخیره کردنش دیگه خطا نداشته باشه.
                  پیروز باشین

                  دیدگاه


                    #10
                    پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

                    بله کاملا حق با شما بود خیلی ممنون
                    فقط امکان داره کاربرد strcat رو در کد imwrite(g,strcat('C:\Documents and توضیح بدید؟

                    دیدگاه


                      #11
                      پاسخ : تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

                      نوشته اصلی توسط minaaaHA
                      بله کاملا حق با شما بود خیلی ممنون
                      فقط امکان داره کاربرد strcat رو در کد imwrite(g,strcat('C:\Documents and توضیح بدید؟
                      خوددستور strcat برای الحاق چند رشته به هم استفاده میشه. برای مثال بیشتر میتونین هلپ متلب رو ببینین.
                      اما در اینجا چون این دستورimwrite داخل حلقه هست وقرار در هر بار تکرار حلقه یک عکس روی هارد ذخیره بشه، پس شما نیاز به تولید اسم جدید در هر تکرار دارین، چون درغیر این صورت مرتبط عکس جدید روی عکس قبلی در هارد دیسک overwrite میشه، پس اومدیم از شمارنده حلقه (i) برای نامگذاری استفاده کردیم. و ابتدا عدد را به رشته تبدیل گردیم و سپس رشته ها را به هم چسبوندیم.

                      دیدگاه


                        #12
                        تقسیم تصویر ۵۱۲x۵۱۲ به ۱۲۸x۱۲۸ و ثبت آنها در پوشهآ‌ای جدید

                        با سلام ..... :smile:

                        با تشکر از پاسخ جناب shabshekan :agree:
                        من هم یکی نوشتم جواب هم داد
                        عملکرد کلی اش این جوری هست که از مسیر مشخص شده همه عکس های با فرمت jpeg رو میخونه البته این هم بگم که حتما باید سایزشون 200*200 باشه !!! البته من نمیدونستم باید چه کارش کنم که فقط عکس های با این سایز رو بخونه پس خودتون قبل از کار باید اگه عکسی با فرمت jpeg هست و سایزش بجز 200*200 رو دارید حذف کنید !!! :mrgreen:
                        بعد هم که عکس ها رو خونیدم داخل ارایه سلولی f ذخیره میشه ...بعد این ارایه خونده شده و هر عکسی که داخلش بود ه رو به 16 قسمت 50*50 تبدیل کرده و داخل ارایه سلولی g قرار داده بعد هم که همه قطعات عکس ها رو داخل پوشه cd یا همون پوشه جاری متلب ذخیره شده .
                        یه توضیح خیلی ساده هم بالاشون نوشتم البته فکر کنم پر از غلط املائی و گرامری هست

                        مصادیق اظهار محبت به همسر
                        بررسی مسائل جنسی در زندگی زناشویی(فایل صوتی)
                        ویژگی های خانواده سالم - مصادیق احترام (فایل صوتی)
                        اثر قصه گویی برای کودکان

                        دیدگاه

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