Path: news.mathworks.com!not-for-mail From: "Karl " <karllandheer@gmail.com> Newsgroups: comp.soft-sys.matlab Subject: Circular Region in Matrix Date: Thu, 23 Jun 2011 20:56:04 +0000 (UTC) Organization: The MathWorks, Inc. Lines: 28 Message-ID: <iu0994$j6$1@newscl01ah.mathworks.com> Reply-To: "Karl " <karllandheer@gmail.com> NNTP-Posting-Host: www-06-blr.mathworks.com Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: newscl01ah.mathworks.com 1308862564 614 172.30.248.38 (23 Jun 2011 20:56:04 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Thu, 23 Jun 2011 20:56:04 +0000 (UTC) X-Newsreader: MATLAB Central Newsreader 1668916 Xref: news.mathworks.com comp.soft-sys.matlab:733477 Hi, I want to average the values in a 616x1216 matrix in rings around a particular point (the centre of the ring, obviously). Currently my program uses a few nested loops to do this but it is very slow as I know MATLAB was not built for iteration. Here is my current code: j0 = 305; k0 = 672; rmin = Rod(RodCounter)-j0+1; %the smallest radius possible is defined by the region directly above the tungsten bar for r = rmin:NumberOfRows/2; %loop through all possible circles i = i +1; %calculate the angle this scatter is taking place at using the %knowledge that the pixel is 200um by 200um angles(i) = atan((r*pixelSize)/targetDistance)*180/pi; t(i) = i; A(i) = 0.; C(i) = 0; for j = 1:NumberOfRows for k = 1:NumberOfColumns R_sq = (j-j0)^2 + (k-k0)^2; if (R_sq > (r-1)^2 & (R_sq <= r^2)) if (j > Rod(RodCounter)) | (j < Rod(1)) A(i) = A(i) + RawImage(j,k); C(i) = C(i) + 1; H(i) = A(i)./C(i); %normalize the scatter profile end end end end end I was wondering how I would go about doing this without the loops? Something using mesh grid seems possible but I don't quite understand the function (and have read the help on it)... Or really how it would apply to my case. Anyways thank you very much for your help!