تالار گفتمان مانشت
Image cropping در متلب - نسخه‌ی قابل چاپ

Image cropping در متلب - mina001 - 15 مهر ۱۳۹۵ ۱۲:۰۷ ب.ظ

سلام دوستان در متلب چطوری میتونم یک تصویر را در مرحله پیش پردازش Image cropping کنم؟
لطفا راهنماییم کنید

RE: Image cropping در متلب - Behnam‌ - ۱۶ مهر ۱۳۹۵ ۰۳:۲۸ ق.ظ

(۱۵ مهر ۱۳۹۵ ۱۲:۰۷ ب.ظ)mina001 نوشته شده توسط:  سلام دوستان در متلب چطوری میتونم یک تصویر را در مرحله پیش پردازش Image cropping کنم؟
لطفا راهنماییم کنید
هم با موس میشه و هم دستی.
این دستور که باعث میشه عکس رو گرافیکی نشون بده و با موس، مستطیل رو انتخاب کنید
کد:
I = imread('circuit.tif')
J = imcrop(I);
دستور زیر هم مختصات گوشه‌های مستطیل رو به صورت دستی داده
کد:
I = imread('circuit.tif');
J = imcrop(I,[60 40 100 90]);

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: Image cropping در متلب - mina001 - 16 مهر ۱۳۹۵ ۰۶:۰۶ ب.ظ

نقل قول: هم با موس میشه و هم دستی.
این دستور که باعث میشه عکس رو گرافیکی نشون بده و با موس، مستطیل رو انتخاب کنید
کد:
I = imread('circuit.tif')
J = imcrop(I);
دستور زیر هم مختصات گوشه‌های مستطیل رو به صورت دستی داده
کد:
I = imread('circuit.tif');
J = imcrop(I,[60 40 100 90]);

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
ممنونم از پاسختون
کدی که من نوشتم به صورت زیر است، ولی درست کار نمیکند من میخواهم فقط قسمت سیاه دور تصویر حذف شود، یعنی قسمت imcropp رو نمیدانم چطور برای برش عدد بدم!
کد:
X = imread('C:\Users\mina\Documents\MATLAB\retina\dataset drive\train\21training.jpg');
X2 = imcrop(X,[50 40 50 50]);
subplot(1,2,1)
imshow(X)
title('Original Image')
subplot(1,2,2)
imshow(X2,'Border','tight')
title('Cropped Image')


RE: Image cropping در متلب - Behnam‌ - ۱۷ مهر ۱۳۹۵ ۱۰:۰۶ ب.ظ

(۱۶ مهر ۱۳۹۵ ۰۶:۰۶ ب.ظ)mina001 نوشته شده توسط:  
نقل قول: هم با موس میشه و هم دستی.
این دستور که باعث میشه عکس رو گرافیکی نشون بده و با موس، مستطیل رو انتخاب کنید
کد:
I = imread('circuit.tif')
J = imcrop(I);
دستور زیر هم مختصات گوشه‌های مستطیل رو به صورت دستی داده
کد:
I = imread('circuit.tif');
J = imcrop(I,[60 40 100 90]);

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
ممنونم از پاسختون
کدی که من نوشتم به صورت زیر است، ولی درست کار نمیکند من میخواهم فقط قسمت سیاه دور تصویر حذف شود، یعنی قسمت imcropp رو نمیدانم چطور برای برش عدد بدم!
کد:
X = imread('C:\Users\mina\Documents\MATLAB\retina\dataset drive\train\21training.jpg');
X2 = imcrop(X,[50 40 50 50]);
subplot(1,2,1)
imshow(X)
title('Original Image')
subplot(1,2,2)
imshow(X2,'Border','tight')
title('Cropped Image')

حدس میزدم این سؤال رو بپرسید چون معنی نداره توو متلب یکی دستی بیاد تصویر رو ببره.
ببینید باید اون چهار نقطه رو با کد پیدا کنید، اون نقاط به صورت [tex](x1,\: y1)[/tex] که نقطه‌ی بالا سمت چپ مستطیل رو نشون میده، و [tex](x2,\: y2)[/tex] که پایین و سمت راست رو نشون میده. همین دو نقطه برای crop لازم و کافی هستند.
برای پیدا کردن x1، یعنی مختصات x سمت چپ تصویر (یه خط عمودی سمت چپ تصویر که باید بریده بشه)، باید از سمت چپ تصویر شروع کنید و به هر ستون نگاه کنید ببینید پیکسل غیرسیاه داره یا نه. یعنی برای هر ستون، به تمامی پیکسل‌ها (سطرها) نگاه کنید. البته مطمئن نیستم که اونا کاملا سیاه هستند، مثلاً میتونید بگید که RGBش بیشتر از [tex](10,10,10)[/tex] بود (یعنی تقریباً سیاه نبود) پس جزو شکل هست. اینطوری x1 رو میتونید پیدا کنید. در واقع همچین چیزی:
کد:
for j = 1 to j = M
   for i = 1 to i = N
       if(img(i,j,1) > 10 && img(i,j,2) > 10 && img(i,j,3) > 10)
          x1 = j;
          break;
قطعه کد بالا میاد توو دونه دونه ستون‌ها، از چپ به راست، نگاه میکنه ببینه یه پیکسل غیر سیاه داره یا نه. اگه داشت، اون ستون رو به عنوان سمت چپ crop در نظر میگیره. حواستون باشه از کل حلقه‌ها بیرون برید بعدش و الا میاد jهای بعدی رو انتخاب میکنه. ما اولین ستون رو میخوایم نه آخریش رو!

همین کار رو برای y1، یعنی خط افقی بالای تصویر که باید بریده بشه، میتنید انجام بدید. توو هر سطر، باید نگاه کنید ببینید پیکسل غیرسیاه هست یا نه. پس این سری اول به سطر، و بعد به همه‌ی ستون‌های اون سطر باید نگاه کنید:
کد:
for i = 1 to N
   for j = 1 to M
      if (...)
          y1 = i;

برای سمت راست و پایین هم مشابه این کار رو انجام میدید. منتهی باید متغیرها رو کم کنید. یعنی برای خط سمت راست، از سمت راست‌ترین ستون نگاه کنید به سمت چپ‌ترین:
کد:
for j = M to 1
   for i = 1 to N
برای خط پایین هم، از آخرین سطر به بالا.
کد:
for i = N to 1
   for j = 1 to M


RE: Image cropping در متلب - gunnersregister - 22 مهر ۱۳۹۵ ۰۱:۱۵ ب.ظ

برای پیدا کردن کوچیکترین مستطیلی که شامل اون دایره ها باشه این راه بهتر به نظر میرسه:

۱/ تصویر رنگی تون رو تبدیل به grayscale کنید. اسمش رو بزاریه I1
۲/ لبه های تصویر I1 رو پیدا کنید.اسمش رو بزارید I2
۳/ در تصویر I2 به دنبال چهار مقدار زیر بگردید(تصویر I2 مقادیر ۰و۱ داره.) بیشترین و کمترین اندیس x,y . این مقادیر چهارچوب دایره رو تعیین میکنن.
۴/ حالا با دونستن اینها میتونید از همون دستور imcrop استفاده کنید.