آشنايي با اصول‌اوليه ومحاسبات رياضي تصاوير در متلب

آشنايي با اصول‌اوليه ومحاسبات رياضي تصاوير در متلب

سيستم‌هاي مختصات‌دهي تصاوير

سيستم مختصات‌دهي پيكسلي

متداولترين روش براي مختصات‌دهي است. در اين روش، تصوير به عنوان شبكه‌اي از عناصر گسسته در نظر گرفته مي‌شود كه مطابق شكل زير، به ترتيبِ از بالا به پايين، و از چپ به راست چيده شده‌اند.

اولین مولفه r (سطر) بوده و به سمت پایین افزایش می‌یابد. دومین مولفه c (ستون) بوده و به سمت راست افزایش می‌یابد. مختصات پیکسل‌ها اعداد صحیحی هستند که بین 1 تا ماكزيم تعداد سطرها/ستون‌ها تغيير مي‌كنند. بين مختصات سطر و ستوني پيكسل‌ها و مختصات نقاط متناظر در ماتريس تصوير تناظر يك به يك وجود دارد. براي مثال عضوي از ماتريس I به مختصات (2.15)I همان پيكسل واقع در سطر دوم و ستون پانزدهم است.

مختصات مکانی

در اين روش به جاي اينكه پيكسل را به عنوان يك نقطه گسسته در نظر بگيريم، آن را به عنوان يك مربع كوچك در نظر مي‌گيريم. بنابراين، در اين روش مختصات (5.3و2.2) معنا‌دار خواهد بود حال آنكه در مختصات پيكسلي فاقد معنا است. در روش مختصات مكاني، نقاط مختلف تصوير در واقع مكان‌هايي در صفحه‌ي x-y بوده و با همين اعداد(یعنی x,y) توصیف می‌شوند، نه r,c.

بين دو سيستم مختصات‌دهي فوق رابطه‌اي نيز وجود دارد و آن اين است كه مختصات نقاط واقع بر مقادير صحیح y و x -یعنی مختصات مراکز پیکسل‌ها- (در مختصات‌دهی مکانی) همان مختصات پیکسل واقع بر سطر r و ستون c(با r=y و c=x)می‌باشد. يكي از موارد اختلاف بين دو سيستم فوق اين است كه در مختصات‌دهي پيكسلي مختصات اولين نقطه برابر (1و1)است. اما در مختصات‌دهي مكاني اين مختصات برابر (0.5) و (0.5) است .زيرا سيستم مختصات‌دهي پيكسلي، گسسته و سيستم مختصات‌دهي مكاني، پيوسته است. دومين اختلاف مهم بين دو سيستم فوق ترتيب نوشتن مختصات است. در مختصات‌دهي پيكسلي به ترتیب (r,c) اما در مختصات‌دهي مكاني به ترتيب (x,y) عمل مي‌شود. در صفحات مرجع و راهنما هرگاه از نمادهاي r , c براي مختصات پيكسل‌ها استفاده شده باشد به معناي سيستم مختصات‌دهي پيكسلي و هرگاه از x و y استفاده شود به معناي سيستم مختصات‌دهي مكاني است.

تغيير محدوده مختصات مكاني

محدوده تغييرات مختصات مراكز پيكسل‌ها در ويژگي‌هاي XData وYData قرار دارد. اگر A تصويري داراي 100 سطر و 200 ستون باشد، مقدار پيش فرض YDataبرابر [1,100] و مقدار پيش فرض XData برابر [1,200] است بنابراين، مختصات x نقاط اين تصوير در سيستم مختصات‌دهي مكاني، در حالت پيش فرض،در محدوده [0.5,200.5] و مختصات y نیز در محدوده [0.5,100.5]تغییر می‌کنند.

براي تغيير محدوده مختصات در سيستم مختصات‌دهي مكاني مي‌توانيد ويژگي‌هاي YData وXData را در حین نمایش تصویر تغییر دهید. برای مثال:

A = magic(5); x = [19.5 23.5]; y = [8.0 12.0]; image(A,'XData',x,'YData',y), axis image, colormap(jet(25))

انواع داده‌اي تصاوير

منظور از انواع داده‌هاي تصاوير، نحوه‌ي برخورد و تفسير متلب با داده‌هاي يك تصوير است. چهار نوع اساسي در متلب وجود دارد:

1-تصاوير باينري (يا دودويي)

يك تصوير باينري به صورت يك آرايه منطقي(logical)ذخيره مي‌شود. معمولاً در اين كتابچه از نماد bw براي اشاره به تصاوير باينري استفاده مي‌شود.

2- تصاوير انديس گذاري شده

در اين روش از يك آرايه و يك ماتريس رنگ (به نام ماتريس نقشه رنگ ) استفاده مي‌شود. ابعاد آرايه برابر ابعاد تصوير اصلي است. مقادير هر عنصر از آرايه در حقيقت اشاره‌گري به درون ماتريس رنگ است تا رنگ (در حالت تصاوير رنگي) و يا شدت روشنايي (در حالت تصاوير سطح خاكستري) پيكسل مربوطه را تعيين كند. ابعاد ماتريس رنگ برابرm*3 و داده‌هاي داخل آن از نوع double (یعنی اعشاری)و بین [0,1] می‌باشند.هر سطر اين ماتريس بيانگر تركيبي خاص از رنگهاي قرمز، سبز، و آبي بوده و در واقع، ضرايب اين تركيب محسوب مي‌شوند.

در اين كتابچه به طور پيش فرض معمولاً از نمادX برای آرایه مذکور و از نماد map براي ماتريس رنگ مذكور استفاده مي‌شود.

معمولاً همراه هر تصوير انديس گذاري شده، ماتريس رنگ مربوطه نيز ذخيره مي‌شود و اگر به كمك دستور imread شما تصويري را بخوانيد، ماتريس رنگ نيز به طور خودكار خوانده مي‌شود. بنابراين، در فضاي كاريِ خود بايد دو متغير مجزا مشاهده كنيد.

تعداد نسبتاً زيادي ماتريس رنگ از قبل مشخص وجود دارد كه شما مي‌توانيد هركدام را كه مايل بوديد استفاده كنيد (حتي مي‌توانيد خودتان يك ماتريس رنگ ايجاد كرده و از آن استفاده كنيد).

بين مقدار عناصر آرايه X و تعداد سطرهاي ماتريس رنگ map همواره رابطه‌اي وجود دارد و نوع اين رابطه به نوع اعداد آرايه (به اصطلاح كلاس تصوير) بستگي دارد. اگر نوع تصوير برابر double و يا single باشد، آرایه‌ی X شامل اعدادي بين 1 تا p است که p برابر طول (يا تعداد سطرهاي) ماتريس رنگ است. مقدار 1 در آرایه X به اولين سطر (يا رنگ) ماتريس رنگ، مقدار 2 به دومين سطر، ... ، و مقدار p به p امین سطر ماتريس رنگ اشاره مي‌كند. اگر نوع تصوير برابر 16 uint و يا ،uint8 ،logical باشد، مقدار صفر در آرايه‌ی X به اولين سطراز ماتريس رنگ، مقدار 1 به دومين سطر، (و همين طور الي آخر) اشاره مي‌كند.

3- تصاوير سطح خاكستري

يك تصوير سطح خاكستري يك ماتريس دو بعدي است كه عناصر آن معرف شدت روشنايي پيكسل مربوطه در محدوده‌اي مشخص مي‌باشند. به طور پيش فرض در اين كتابچه از نماد I براي اشاره به تصاوير سطح خاكستري استفاده شده است.

نوع (يا كلاس) يك تصوير سطح خاكستري مي‌تواند برابر16 int و يا ، uint16 ،uint8 ،double ،single باشد. متلب معمولاً براي نمايش تصاوير سطح خاكستري نيز از ماتريس رنگ (مشابه با تصاوير انديس گذاري شده) استفاده مي‌كند. اما براي ذخيره‌ي آنها معمولاً از ماتريس رنگ استفاده نمي‌‍كند. اگر نوع تصوير برابر double و يا single باشد، طبق ماتريس رنگ پيش فرض، مقدار صفر متناظر با سياه كامل و مقدار 1 متناظر با رنگ سفيد كامل است. براي تصاويري از نوع 16 int و يا uint16 ،uint8 مقدارintmin(class(I)) متناظر با رنگ سياه كامل و مقدار intmax(class(I)) متناظر با رنگ سفيد كامل است.

4- تصاوير رنگي

يك تصوير رنگي، تصويري است كه هر پيكسل آن با سه عدد مشخص مي‌شود كه هر عدد متناظر با شدت يكي از رنگ‌هاي قرمز، سبز و آبی است. (در حقيقت، مي‌دانيم كه هر رنگ را مي‌توان با تركيبي از اين رنگ‌هاي اصلي به دست آورد).در متلب هر تصوير رنگي به صورت يك آرايه ي m×n×3 (يعني يك آرايه سه بعدي) ذخيره مي‌شود. اين آرايه، در حقيقت، شامل سه ماتريس رنگ است كه هر ماتريس مشخص كننده‌ي شدت يكي از رنگ‌ها براي تمام پيكسل‌هاي مختلف مي‌باشد. در تصاوير رنگي، ديگر از ماتريس رنگ استفاده نمي‌شود.

هر تصوير رنگي مي‌تواند از يكي از انواع double و يا ،single ،uint16 ،uint8 باشد.در حالت single و double هر مولفه رنگ عددي بين صفر تا 1 است. بنابراين مولفه‌ي (0,0,0) به معنای سياه كامل و مولفه‌ي (1,1,1)به معناي سفيد كامل است. مولفه‌هاي رنگ هر پيكسل واقع در مختصات (x,y)در بعد سوم از آرايه‌ي سه بعدي متناظر با تصوير قرار داده مي‌شوند. مثلاً مولفه‌هاي قرمز، سبز و آبيِ پيكسل واقع در مختصات ( 4,15 ) از تصوير RGB در محل‌هاي به ترتيب RGB(4,15,3) وRGB(4,15,2) ،RGB ( 4,15,1)قرار دارند.

مثال زير يك نمونه از تركيب رنگ‌ها را نشان مي‌دهد:

RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]); R=RGB(:,:,1); G=RGB(:,:,2); B=RGB(:,:,3); imshow(R) figure, imshow(G) figure, imshow(B) figure, imshow(RGB)

تبديل بين انواع مختلف تصويري

براي تبديل نوع سطح خاكستري به نوع رنگي كافي است كه تصوير را سه بار كپي كرده و در يكي از سه بعدتصوير رنگي مربوطه قرار دهيم.اگرI يك تصوير سطح خاكستري باشد و بخواهيم از روي آن تصوير رنگي RGB بسازیم به طریق زیر می‌توان عمل کنیم.

RGB = cat(3,I,I,I);

تمرین: در مورد دستور cat راهنما بگیرید و نحوه کار آن را توضیح دهید.

توابع مربوط به تبدیل انواع:

demosaic, dither,gray2ind,grayslice,im2bw,ind2gray,ind2rgb,mat2gray,rgb2gray,rgb2ind

تبديل بين انواع كلاس‌هاي مختلف تصويري

براي تبديل نوع‌هاي uint8 ،uint16 به نوع double از دستور double استفاده كنيد اما توجه داشته باشيد كه گاهي اوقات لازم است در ادامه اعداد را نرماليزه و يا باياس هم كنيد. براي اينكه مطمئن شويد كه كار نرماليزه كردن و يا باياس كردن به درستي انجام مي‌شود مي‌توانيد از توابع زير براي تبديلات مختلف خوداستفاده كنيد:

im2uint16, im2int16, im2uint8, im2single, im2double

براي مثال اگر تصويري از نوع double داريد (و بنابراين مقادير عددي آن بين صفر تا 1 مي باشد)، به كمك دستور زير آن را به نوع uint8 تبديل كنيد (بنابراين در تصوير خروجي، مقادير بين صفر تا 255 مي‌باشند):

RGB2 = im2uint8(RGB1);

توجه كنيد كه در انجام برخي تبديلات مقداري از اطلاعات را ممكن است از دست دهيد. براي مثال، اگر تصویری از نوع uint16 را بخواهید به نوع uint8 تبدیل کنید، تعداد سطوح از 65536 به 256 کاهش مي‌يابد و بنابراين بديهي است كه مقداري از اطلاعات را از دست مي‌دهيد. نكته ديگر در مورد تبديل تصاوير انديس گذاري شده است. توجه كنيد كه هميشه و در هر حالتي نمي‌توانيد يك تصوير انديس گذاري شده را به نوع ديگري مانند uint8 تبديل كنيد. براي مثال اگر تصوير انديس گذاري شده داراي 300 رنگ در ماتريس رنگ خود باشد، از آنجا كه نوع uint8 فقط قادر به نمايش 256 سطح مختلف است، بايد ابتدا تعداد رنگ‌هاي ماتريس رنگ را به كمك تابع imapprox كاهش داده و سپس از تبديل مورد نظر استفاده كنيد.

كار با دنباله‌هاي تصاوير

برخي تصاوير در حوزه زمان (مانند فريم‌هاي ويدويي) يا مكان (مانند تصاوير MRI ) به هم مرتبط هستند. اين گونه تصاوير را دنباله‌هاي تصويري يا انباشته‌هاي تصويري مي‌گويند

براي ذخيره و پردازش دنباله‌هاي تصويري بايد يك آرايه سه‌بعدي يا چهار بعدي ايجاد كرد. براي ايجاد دنباله‌هايي از تصاوير سطح خاكستري و باينري نياز به آرايه سه بعدي (m×n×p)و براي ايجاد دنباله‌هايي از تصاوير رنگي نياز به آرايه چهار بعدي (m×n×3×p)داريم.

برخي توابع در متلب آرايه‌هاي چند بعدي قبول مي‌كنند اما لزوماً به چشم تصوير به آنها نگاه نمي‌كنند؛ بنابراين، در استفاده از آنها بايد دقت كنيد.

مثال: پردازش يك دنباله از تصاوير

در اين مثال، يك سري از تصاوير از يك دايركتوري خاص خوانده شده و به درون فضاي كاري متلب منتقل مي‌شوند. در اين مثال، تصاوير به صورت يك آرايه سه بعدي m×n×p خوانده و در فضاي كاري متلب ذخيره مي‌شوند. سپس تابع stdfilt روي همه تصاوير اعمال مي‌شود. اين تابع كار فيلتر كردن مبتني بر انحراف معيار را روي تك تك تصاوير انجام مي‌دهد. با توجه به توضيحات جدول اخير در مورد تابع stdfilt ملاحظه می‌کنید که باید از آرگمان nhood استفاده کنیم. بنابراین، ابتدا از تابع stdfilt راهنما بگیرید.

>> help stdfilt STDFILT Local standard deviation of image. J = STDFILT(I) returns the array J, where each output pixel contains the standard deviation value of the 3‐by‐3 neighborhood around the corresponding pixel in the input image I. I can have any dimension. The output image J is the same size as the input image I

For pixels on the borders of I, STDFILT uses symmetric padding. In symmetric padding, the values of padding pixels are a mirror reflection of the border pixels in I.

J = STDFILT(I,NHOOD) performs standard deviation filtering of the input image I where you specify the neighborhood in NHOOD. NHOOD is a multidimensional array of zeros and ones where the nonzero elements specify the neighbors. NHOOD's size must be odd in each dimension.

By default, STDFILT uses the neighborhood ones(3). STDFILT determines the center element of the neighborhood by FLOOR((SIZE(NHOOD) + 1)/2). For information about specifying neighborhoods, see Notes.

Class Support I can be logical or numeric and must be real and nonsparse. NHOOD can be logical or numeric and must contain zeros and/or ones. I and NHOOD can have any dimension. J is double.

Notes To specify the neighborhoods of various shapes, such as a disk, use the STREL function to create a structuring element object and then use the GETNHOOD function to extract the neighborhood from the structuring element

Examples I = imread('circuit.tif'); J = stdfilt(I); imshow(I); figure, imshow(J,[]);

See also std2, rangefilt, entropyfilt, strel, GETNHOOD.

ملاحظه مي‌كنيد كه nhood تعيين كننده پيكسل‌هايي است كه بايد در كار محاسبه‌ي انحراف معيار محلي از آنها استفاده كنيم. در مثال فعلي،از ones(3) براي اين آرگومان استفاده شده است. يعني يك همسايگي دو بعدي تعريف شده است.

برنامه‌ي مثال:

% Create an array of filenames that make up the image sequence fileFolder = fullfile(matlabroot,'toolbox','images','imdemos'); dirOutput = dir(fullfile(fileFolder,'AT3_1m4_*.tif')); fileNames = {dirOutput.name}'; numFrames = numel(fileNames); I = imread(fileNames{1}); % Preallocate the array sequence = zeros([size(I) numFrames],class(I)); sequence(:,:,1) = I; % Create image sequence array for p = 2:numFrames sequence(:,:,p) = imread(fileNames{p}); end % Process sequence sequenceNew = stdfilt(sequence,ones(3)); % View results figure; for k = 1:numFrames imshow(sequence(:,:,k)); title(sprintf('Original Image # %d',k)); pause(1); imshow(sequenceNew(:,:,k),[]); title(sprintf('Processed Image # %d',k)); pause(1); end

براي توضيحات اين برنامه از برخي توابعي كه احتمالاً تاكنون آنها را نديده‌ايد، راهنما بگيريد. مثلاً براي تابع fullfile:

help fullfile FULLFILE Build full filename from parts. FULLFILE(D1,D2, ... ,FILE) builds a full file name from the directories D1,D2, etc and filename FILE specified. This is conceptually equivalent to

F = [D1 filesep D2 filesep ... filesep FILE]

except that care is taken to handle the cases where the directory parts D1, D2, etc. may begin or end in a filesep. Specify FILE = '' to build a pathname from parts

Examples To build platform dependent paths to files: fullfile(matlabroot,'toolbox','matlab','general','Contents.m')

To build platform dependent paths to a directory addpath(fullfile(matlabroot,'toolbox','matlab',''))

See also filesep, pathsep, fileparts

براي دستور dir:

>> help dir DIR List directory. DIR directory_name lists the files in a directory. Pathnames and wildcards may be used. For example, DIR *.m lists all the M‐files in the current directory.

D = DIR('directory_name') returns the results in an M‐by‐1

structure with the fields: name ‐‐ Filename date ‐‐ Modification date bytes ‐‐ Number of bytes allocated to the file isdir ‐‐ 1 if name is a directory and 0 if not datenum ‐‐ Modification date as a MATLAB serial date number. This value is locale‐dependent.

See also what, cd, type, delete, ls, rmdir, mkdir, datenum



نظرات کاربران



عبارت امنیتی : حاصل 2 × 8 می شود :
متن پیام :