ورود

View Full Version : دستور تبدیل تصویر باینری به RGB



nadaf.m
پنج شنبه 21 آبان 1394, 16:14 عصر
سلام

من نیاز به دستوری دارم که یتونم باهاش یک تصویر باینری شده رو به RGB آن تصویر برگردونم!!

ممنون میشم راهنماییم کنید.

با تشکر

rahnema1
پنج شنبه 21 آبان 1394, 18:11 عصر
سلام
اگه منظورتون اینه که تصویر تک بیتی باشه باید نکات زیر را توجه کنید:
وقتی یک تصویر رنگی به باینری تبدیل شده یعنی دو نوع قدرت تفکیک اون کاهش پیدا کرده
1. قدرت تفکیک طیفی : سه تا کانال r و g وb تبدیل به یک کانال شده
2. قدرت تفکیک رادیومتریک: یعنی اطلاعات هر کانال که مثلا 8 بیت بوده تبدیل به یک بیت شده
فقط با معجزه می شه تصویر باینری را به rgb تبدیل کرد!!

nadaf.m
پنج شنبه 21 آبان 1394, 19:31 عصر
با سلام مجدد....ممنون از توجتون.

پس یعنی طبق گفته شما هیچ راهی وجود نداره که ما تصویر رنگی که باینری کردیم رو دوباره بعد از حذف یکسری شکل های اضافه، به تصویر رنگیش تبدیل کنیم!!!درسته؟!

rahnema1
پنج شنبه 21 آبان 1394, 20:00 عصر
الان شما تصویر rgb اصلی تو دستتون هست یا نه؟
اگر تصویر اصلی نیست خب مسلمه که مقدار زیادی اطلاعات از بین رفته حالا این اطلاعات از بین رفته را ازکجا می خواهید بازیابی کنید
لطفا دقیقا بگید چی کار می خواهید انجام بدید

nadaf.m
پنج شنبه 21 آبان 1394, 23:59 عصر
من باید برنامه ای بنویسم که یک تصویر رنگی دریافت می کنه و بعد باید یک سری اشیاء اضافه ازش حذف شه! و در نهایت اگه امکانش باشه دوباره تصویر رنگی اصلی رو به صورت ویرایش شده(یعنی فقط شامل شی هدف باشه) نمایش بده!!

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

ممنون

rahnema1
جمعه 22 آبان 1394, 07:45 صبح
خب از همون اول باید این را می گفتید
این کار که خیلی آسونه الان شما این تصویری که به صورت باینری دارید در واقع یک ماسک هست که اون را روی تصویر اصلی می اندازید
مثلا در تصویر باینری جاهایی که شیء مورد نظر هست 1 و جاهای دیگه صفر باشه
کافیه تصویر باینری را ضرب در تصویر اصلی کنید تا ماسک روی تصویر اعمال بشه

nadaf.m
جمعه 22 آبان 1394, 10:05 صبح
ممنون

اما مگه دستور ضرب دو تصویر در هم دستورimmultiply

نیست؟!!

من امتحان کردم اما خطای زیر رو میده!!!یعنی در واقع به خاطر هم سایز نبودنشون، خطا میده!! چطور باید هم سایزشون کنیم!!؟


Error using immultiply>doLogicalMultiplication (line 67)
X and Y must be the same size.
Error in immultiply (line 48)
Z = doLogicalMultiplication(X,Y)
Error in threshold (line 27)
G=immultiply(m,n)

rahnema1
جمعه 22 آبان 1394, 13:14 عصر
به صورت زیر

mask = repmat(binary_img, [1 , 1 , 3]);
masked_img = immultiply(img , mask);

یا

mask = repmat(binary_img, [1 , 1 , 3]);
masked_img = img .* mask;

nadaf.m
جمعه 22 آبان 1394, 13:44 عصر
خیلی ممنون!!!!

جواب داد.................

متشکرم.

nadaf.m
دوشنبه 30 آذر 1394, 23:39 عصر
با سلام
کد زیر باید نتیجه اش یک تصویر رنگی باشه، اما با اجرا کردنش تصویر باینری داده میشه! میدونم مشکل در رابطه با منطبق نبودن سایز داده هاست! اما نمیدونم چطور باید برطرفش کرد!در واقع توی این کد، تصویر باینری چطور باید سه کاناله بشه تا در تصویر اصلی بشه اون رو ضرب کرد!؟
for i=1:3

mask=uint8(mask)

eye(:,:,i)= double(a(:, :, i).* mask);

imshow(uint8(eye));

end

a تصویر رنگی هست و mask تصویر باینری می باشد.
لطفا راهنماییم کنید!ممنون

rahnema1
سه شنبه 01 دی 1394, 15:22 عصر
سلام
جواب را در پست قبلی گفتم
اما تو این یکی نمیدونم داده های شما چی بوده ولی eye اسم یک تابع هست که تغییر دادم و imshow هم نحوه استفاده را کمی تغییر دادم

mask=uint8(mask);
for i=1:3
imgeye(:, :, i)= double(a(:, :, i) .* mask);
end
imshow(uint8(imgeye), []);

nadaf.m
سه شنبه 01 دی 1394, 18:01 عصر
سلام
خیلی ممنون!!
درسته شما جواب رو قبلا داده بودید اما توی این کد میخواستم بدون استفاده از کد repmat به نتیجه برسم!

میشه لطف کنید بگید دستور imgeye دقیقا چه کاری انجام میده!؟ و در قسمت imshow اون کاراکتر [] دقیقا به چه منظور استفاده شده!!؟

با تشکر

nadaf.m
سه شنبه 01 دی 1394, 18:12 عصر
چرا تابع eye رو به imgeye تغییر دادید؟! در حالی که با همان تابع نتیجه بدست میاد!!

rahnema1
سه شنبه 01 دی 1394, 23:42 عصر
چرا تابع eye رو به imgeye تغییر دادید؟! در حالی که با همان تابع نتیجه بدست میاد!!

هر اسم دیگه غیر از imgeye هم می تونستم بذاریم مثلا اسمش را بذارم tasvir یا my_image یا هر اسم دیگه فقط اسمش نباید eye باشه چون eye یکی از تابعهای متلب هست و مثلا فرض کنید در ادامه برنامه می خواهید از تابع eye استفاده کنید دیگه نام اون تابع با این کار شما در دسترس نخواهد بود! مگه اینکه clear کنید
علتش اینه که نحوه استفاده از آرایه و تابع در متلب یکسانه یعنی وقتی می خواهیم یک تابع را صدا بزنیم یک پرانتز جلوش باز و بسته می کنیم و برای اندیس دهی ماتریسها هم جلوی اون پرانتز می ذاریم پس باید در نامگذاری ماتریسها دقت لازم به عمل بیاریم تا معادل نام تابعهای موجود نباشه
اون علامت [] هم باعث می شه نمایش تصویر بهبود پیدا کنه و محدوده تمام مقادیر خکستری عکس را پوشش بده که توی هلپ imshow هم توضیح داده شده

nadaf.m
چهارشنبه 02 دی 1394, 19:11 عصر
بابت توضیحاتتون خیلی ممنون!