Speed Improvement [message #74588] |
Tue, 25 January 2011 01:24  |
Rony K Varghese
Messages: 3 Registered: January 2011
|
Junior Member |
|
|
Dear All,
How can i improve the speed of below IDL source through code
optimizing..Now the performance is not satisfactory..
;Processing a picture
for sCount = 0, 9 do begin
for sRow = UpperRow, LowerRow do begin
for sCol = sLeftCol, sRightCol do begin
; Check whether high pixels.
if E_F_ATTNMAP_HIGH_PIXEL eq PixelArr[sCol, sRow] then
begin
sXCol = sCol
sYRow = sRow
endif
; from the center to the left
for sIndex = 0, sHalfWid do begin
if HIGH_PIXEL eq vTemp[sXCol - sIndex, sYRow] then
begin
PixelArr[sXCol - sIndex, sYRow] = HIGH_PIXEL
endif else begin
break ; break from for sIndex
endelse
endfor
; from the center to the right
for sIndex = 0, sHalfWid do begin
if HIGH_PIXEL eq vTemp[sXCol + sIndex, sYRow] then
begin
PixelArr[sXCol + sIndex, sYRow] = HIGH_PIXEL
endif else begin
break ; break from for sIndex
endelse
endfor
; from the center to down
for sIndex = 0, sHalfHght do begin
if HIGH_PIXEL eq vTemp[sXCol, sYRow+ sIndex] then
begin
PixelArr[sXCol, sYRow+ sIndex] = HIGH_PIXEL
endif else begin
break ; break from for sIndex
endelse
endfor
; from the center to up
for sIndex = 0, sHalfHght do begin
if HIGH_PIXEL eq vTemp[sXCol, sYRow - sIndex] then
begin
PixelArr[sXCol, sYRow - sIndex] = HIGH_PIXEL
endif else begin
break ; break from for sIndex
endelse
endfor
endfor; end for sCol
endfor; end for sRow
endfor;end for sCount
Thanks in advance..
Rony
|
|
|
Re: Speed Improvement [message #74610 is a reply to message #74588] |
Thu, 27 January 2011 07:38  |
Jeremy Bailin
Messages: 618 Registered: April 2008
|
Senior Member |
|
|
On Jan 26, 10:56 pm, Rony K Varghese <ronykvargh...@gmail.com> wrote:
> On Jan 25, 10:03 pm, jeanh
>
>
>
>
>
>
>
>
>
> <jghasb...@DELETETHIS.environmentalmodelers.ANDTHIS.com> wrote:
>> Hi,
>
>> first, you are not using sCount anywhere... remove this loop
>
>> Instead of looping through all pixels, look for the needed ones
>
>> pixelsToProcess = where(PixelArr eq E_F_ATTNMAP_HIGH_PIXEL,
>> countPixToProcess)
>
>> sXYcol = array_indices(pixelArr, pixelsToProcess) ;get the 2D coords
>
>> for i=0L, countPixToProcess -1 do begin
>> ;process
>> endfor
>
>> Jean
>
>> On 25/01/2011 4:24 AM, Rony K Varghese wrote:
>
>>> ;Processing a picture
>>> for sCount = 0, 9 do begin
>>> for sRow = UpperRow, LowerRow do begin
>>> for sCol = sLeftCol, sRightCol do begin
>>> ; Check whether high pixels.
>>> if E_F_ATTNMAP_HIGH_PIXEL eq PixelArr[sCol, sRow] then
>>> begin
>>> sXCol = sCol
>>> sYRow = sRow
>>> endif
>>> ; from the center to the left
>>> for sIndex = 0, sHalfWid do begin
>>> if HIGH_PIXEL eq vTemp[sXCol - sIndex, sYRow] then
>>> begin
>>> PixelArr[sXCol - sIndex, sYRow] = HIGH_PIXEL
>>> endif else begin
>>> break ; break from for sIndex
>>> endelse
>>> endfor
>>> ; from the center to the right
>>> for sIndex = 0, sHalfWid do begin
>>> if HIGH_PIXEL eq vTemp[sXCol + sIndex, sYRow] then
>>> begin
>>> PixelArr[sXCol + sIndex, sYRow] = HIGH_PIXEL
>>> endif else begin
>>> break ; break from for sIndex
>>> endelse
>>> endfor
>>> ; from the center to down
>>> for sIndex = 0, sHalfHght do begin
>>> if HIGH_PIXEL eq vTemp[sXCol, sYRow+ sIndex] then
>>> begin
>>> PixelArr[sXCol, sYRow+ sIndex] = HIGH_PIXEL
>>> endif else begin
>>> break ; break from for sIndex
>>> endelse
>>> endfor
>>> ; from the center to up
>>> for sIndex = 0, sHalfHght do begin
>>> if HIGH_PIXEL eq vTemp[sXCol, sYRow - sIndex] then
>>> begin
>>> PixelArr[sXCol, sYRow - sIndex] = HIGH_PIXEL
>>> endif else begin
>>> break ; break from for sIndex
>>> endelse
>>> endfor
>>> endfor; end for sCol
>>> endfor; end for sRow
>>> endfor;end for sCount
>
> Thank you all for the help to me......
> This function is to scan and process each pixel of the 128*128 picture
> as in the source code.
> I cannot remove the for loop of scount, because that much times the
> code needs to be executed.
Well, yes, I got that much. :-)= I was trying to understand what
processing you are doing in order to suggest a more efficient method.
-Jeremy.
|
|
|