comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Speed Improvement
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Speed Improvement [message #74588] Tue, 25 January 2011 01:24 Go to next message
Rony K Varghese is currently offline  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 Go to previous message
Jeremy Bailin is currently offline  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.
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: n_elements and NaN
Next Topic: Coyote Graphics Update

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 09:17:16 PDT 2025

Total time taken to generate the page: 0.00617 seconds