تبدیل تصویر grayscale به negative با متلب
در مباحث پردازش تصویر و کار با تصاویر در متلب تمرینهای زیادی مطرح میشود که یکی از این تمرینها تبدیل عکس grayscale به negative (تصویر نگاتیو) در متلب است.
تبدیل تصویر grayscale به negative با متلب
تصویر نگاتیو چیست؟
یک توضیح خلاصه و کوتاه برای عکسهای نگاتیو وجود دارد. تصاویر نگاتیو تصاویری هستند که در واقع کد رنگی پیکسل آنها Invert شده است. مثلا در تصاویر grayscale که دامنهی رنگی هر پیکسل بین 0 تا 255 است، اگر پیکسلی مقدار 50 شود و قصد تبدیل آن پیکسل به مقدار نگاتیو کنیم.
باید از فرمول زیر این کار را انجام دهیم:
255- 50 = negative value
نکته: یک نمونه از تصاویر نگاتیو فیلمهای نگاتیو قدیمی است.
تصویر grayscale یا خاکستری چیست؟!
تصاویر خاکستری یا grayscale تصاویری هستند که طول دامنهی رنگی آنها بین عدد 0 تا 255 است. در این طیف رنگی مقدار 0 یعنی سیاه مطلق و مقدار 1 یعنی سفید مطلق. میانهی این دو مقدار را اصطلاحا به آنها graylevel یا سطوح خاکستری میگوییم.
عنوان تمرین
تبدیل عکس به negative با متلب
نمونه:


حل تمرین:
% Powered By CamelCase.ir
clc;
close all;
clear all;
img1 = imread('img.png');
img2 = img1;
for i = 1 : 500
for j = 1 : 500
img2(i,j) = 255 - img1(i, j);
end
end
figure, imshow(img1);
figure, imshow(img2);
% Powered By CamelCase.ir
توضیح:
- ابتدا تصویر اصلی خوانده میشود. ( نام تصویر img.png است که در کنار فایل برنامه که با پسوند .m است، قرار گرفته است.)
- سپس یک حلقه به اندازهی پیکسلهای طول و یک حلقه به اندازهی پیکسلهای عرض تصویر در نظر میگیریم. (این تصویر 500در500 است.)
- سپس مقدار قبلی تصویر را از مقدار 255 کم میکنیم و در همان شماره خانه در متغیر دوم قرار میدهیم.
- در آخر تصویر اصلی و تصویر تبدیل شده را با دستور imshow نمایش میدهیم.
اگر نیاز به یادگیری نرمافزار متلب را دارید این لینک را دنبال کنید. در صورتی که روشهای بهتری برای تمرین بالا در اختیار دارید برای ما ارسال کنید.


















خروجی این کد رو میشه مستقیما در فرمت jpg ذخیره کرد؟
بله، بعد از تولید تصویر نگاتیو میتونید از دستور imwrite برای ذخیره تصویر استفاده کنید.
امکان ترکیب این روش با فیلترهای دیگر مثل sharpen یا blur وجود داره؟
بله، بعد از تبدیل تصویر به negative میتونید از فیلترهای آماده متلب استفاده کنید.
میشه به جای حلقه، از عملیات برداری متلب برای سرعت بیشتر استفاده کرد؟
قطعاً! در متلب انجام عملیات روی ماتریسها بدون حلقه بسیار سریعتر است.
این روش برای تصاویر رنگی RGB هم قابل استفاده هست یا باید فرمول تغییر کنه؟
برای تصاویر رنگی RGB هم میتونید همان فرمول را روی هر کانال رنگ اعمال کنید، چون هر کانال بین 0 تا 255 است.
اگه تصویر اندازه متفاوتی داشته باشه، حلقهها رو چطور باید تغییر داد؟
به جای استفاده از اعداد ثابت (مثل 500)، بهتر است از ابعاد تصویر استفاده کنید: