نگانیو کردن عکس
اگر
بخواهیم یک
عکس سیاه و
سفید را
نگاتیو کنیم
چی کار باید
کرد؟
با
تمام نرم
افزراهای
پردازش تصویر
به راحتی میتوانید
این کار را
انجام
دهید.امروز میخوایهم
یاد بگیریم با
مطلب این کارو
انجام بدیم.
اولین
کار ایجاد یک
پنچره برای
این کاره
figure('unit','pixel','pos',[50 100 950 600])
a1=axes('unit','pixel','pos',[50
150 400 400],'vis','off');
a2=axes('unit','pixel','pos',[500
150 400 400],'vis','off');
uicontrol('unit','pixel','pos',[225
50 50 25],'string','start','callback','alg(x,a2)');
uicontrol('unit','pixel','pos',[675
50 50 25],'string','exit','callback','close all');
من
این پنجره را
برای وضوح 1024*768
تنظیم
کردم.حالا
باید عکس مورد
نظر را وارد محیط
مطلب کنیم.
x=imread('pic.bmp');
مطلب
تصویر را به
دو حالت ذخیره
می کند.الان با
حالت RGB کار میکنیم. سه
خط بعدی تصویر
را به حالت RGB
تبدیل میکنند.
if ~isrgb(x)
x=ind2rgb(x);
end
و
حالا نمایش
تصاویر
y=x;
image('parent',a1,'cdata',x)
image('parent',a2,'cdata',y);
حالا
باید یک تابع
بنویسیم که
تبدیل مورد
نظر رو روی
عکس انجام
بدهد.
function alg(x,a2)
[m,n,k]=size(x);
yy=[];
hy=image('cdata',yy,'parent',a2);
for i=1:m
for j=1:n
if x(i,j,1)== 0 & x(i,j,2)== 0
x(i,j,3)== 0;
yy(i,j,=[1
1 1];
else
yy(i,j,=[0
0 0];
end
end
set(hy,'cdata',yy,'parent',a2)
drawnow
حتما همه میدانید
که دستورات
بالا مربوط به
یک فایل جداگانه
به اسم alg.m است.
در
حالت RGB هر تصویر
به صورت یک
ماتریس m*n*3
ذخیره میشود.m,n
شماره پیکسل
است.در هر m,n سه
درایه وجود
دارد که رنگ
پیکسل است.
خط
سوم یک تصویر
تهی تعریف می
کند و خط
چهارم آن را
نمایش میدهد.با
کمک این تصویر
نگاتیو شدن
تصوی را به
صورت سطر به
سطر نمایش
دهیم.حتی میتوانیم
به صورت پیکسل
به پیکسل این
کار را انجام
دهیم اما
برنامه کند میشود.
چون
تصویر ما سیاه
و سفید است می
توانستیم شرط
برنامه را به
صورت
if
x(i,j,1)== 0
بنوسیم،
اما در حالت
کلی باید شرط
را بطور کامل
نوشت.
میشود
الگوریتمهای
سریعتری
برای این کار
نوشت اما اصول
کار همین مطالبی
است که یاد
گرفتیم.