انجام تبدیلات فضایی در متلب

چاپ

وقتی که تبدیل مورد نظر را در قالب یک ساختار TFORM مشخص کردیم، می توانیم با فراخوانی تابع imtransform تبدیل مورد نظر را انجام دهیم. تابع imtransform تبدیل مشخص شده را بر روی مختصات عکس ورودی انجام می دهد و یک عکس را بعنوان خروجی ایجاد می کند. در مثال زیر، تابع imtransform فراخوانی شده است تا یک انتقال را انجام دهد. همان طور که مشاهده می کنید، یک عکس و یک ساختار TFORM به این تابع داده شده است. سپس تابع imtransform، عکس تبدیل شده را برمی گرداند:

مثال

cb_trans = imtransform(cb, tform_translate);

 تابع imtransform از چندین نوع پارامتر ورودی، پشتیبانی می کند و شما می توانید از آنها به منظور کنترل تبدیلات استفاده کنید. مثلا می توانید سایز عکس خروجی و رنگ پس زمینه را مشخص کنید. 


 مشخص کردن رنگ پس زمینه

هنگامی که یک تبدیل را بر روی یک عکس  انجام می دهید، معمولا در عکس خروجی پیکسل هایی وجود دارند که جزئی از عکس اصلی نیستند. بنابراین باید به این پیکسل ها، یک رنگ را اختصاص دهیم تا به وسیله ی آن نمایش داده شوند. به این رنگ پس زمینه fill value گفته می شود. به طور پیش فرض، تابع imtransform مقدار 0 را به این پیکسل ها اختصاص می دهد و این پیکسل ها به رنگ مشکی نشان داده می شوند. شما می توانید با استفاده از پارامتر FillValues در تابع imtransform یک رنگ متفاوت را مشخص کنید. برای انجام این کار در عکس های مختلف، به صورت های زیر عمل کنید: 

 در عکس های سیاه و سفید: 

در صورتی که عکس تبدیل شده، یک عکس سیاه و سفید است، شما باید یک عدد که مشخص کننده ی یک سایه ی خاکستری رنگ است را بعنوان رنگ پس زمینه تعیین کنید. بعنوان مثال:

مثال

cb_fill = imtransform(cb, tform_translate,...
'XData', [1 (size(cb,2)+xform(3,1))],...
'YData', [1 (size(cb,1)+xform(3,2))],...
'FillValues', .7 );
figure, imshow(cb_fill)

نتیجه به صورت زیر خواهد بود:

 


در عکس های رنگی(RGB):

در صورتی که عکس مورد تبدیل قرار گرفته از نوع رنگی(RGB) باشد، برای رنگ پس زمینه، هم می توانید از یک عدد و یا از یک بردار 3×1 استفاده کنید. در صورتی که از یک عدد استفاده کنید، تابع imtransform از رنگ های خاکستری برای هر لایه از این عکس رنگی استفاده خواهد نمود. اما اگر از یک بردار 3×1 استفاده کنید، تابع imtransform از آن مقادیر به عنوان یک رنگ RGB استفاده می کند. بعنوان مثال، کد زیر یک عکس رنگی را مورد انتقال قرار می دهد و یک رنگ RGB بعنوان رنگ پس زمینه انتخاب شده است: 

مثال

rgb = imread('onion.png');
xform = [ 1 0 0
0 1 0
40 40 1 ]
tform_translate = maketform('affine',xform);
cb_rgb = imtransform(rgb, tform_translate,...
'XData', [1 (size(rgb,2)+xform(3,1))],...
'YData', [1 (size(rgb,1)+xform(3,2))],...
'FillValues', [187;192;57]);
figure, imshow(cb_rgb)

نتیجه به صورت زیر خواهد بود:

 در صورتی که شما می خواهید چندین عکس رنگی(RGB) را مورد تبدیل قرار دهید، این امکان وجود دارد تا برای هریک از این عکس ها، یک رنگ پس زمینه را مشخص کنید. بعنوان مثال اگر می خواهید دنباله ای از 10عکس رنگی که دارای ابعاد چهار بعدی\(200\times 200\times 3\times 10\) هستند را مورد تبدیل قرار دهید، چندین راه پیش روی دارید. اول اینکه می توانید از یک عدد بعنوان رنگ پس زمینه ی تمام عکس ها استفاده کنید. با انجام این کار، شما یک رنگ خاکستری را بعنوان رنگ پس زمینه انتخاب کرده اید. دوم اینکه می توانید از یک بردار 3×1 استفاده کنید و از یک رنگ برای تمام عکس های رنگی استفاده کنید. اما اگر می خواهید برای هریک از عکس ها، یک رنگ پس زمینه ی متفاوت تعیین کنید، می توانید از یک آرایه ی 10×3 که حاوی مقادیر رنگ ها است استفاده نمایید.