PDA

View Full Version : سوال : پردازش سریع تصاویر



gbg
پنج شنبه 06 اسفند 1388, 23:12 عصر
سلام
من قبلا به روی این مدل برنامه ها کار نردم
مسئله سادست ولی مشکل حاد
من 2 تا تصویر بیت مپ دارم که تمام صفحه رو پر می کنه (800 در 600) تصویر اول رو تبدیل به تصویر دوم می کنم و تغیرش رو نشون میدم تا کانلا به تصویر دوم برسم (مورف)
مشکل اینجاست که سرعت پردازش واقعا پایین هستش و حدود یک ثانیه طول میکشه تا هر بار صفحه رفرش بشه
البته من این 3 تا تصویر رو تو یه متغییر BITMAP ریختم و بعد از پایان محاسبه فریم تصویر سوم رو با دستور DRAW به روی PAINTBOX رسم می کنم
در ضمن اطلاعات تصاویر رو پیکسل به پیکسل می خونم ، فکر می کنین روش scanline چقدر تاثیر میزاره رو سرعت کارم ، ارزشش رو داره که الگوریتمم رو تغییر بدم؟
راه سریع تری هم هست؟

gbg
جمعه 07 اسفند 1388, 01:17 صبح
خب اعتراف می کنم که خیلی سریع نر شدش ولی سرعتش برای من مناسب نیست هنوز
باز هم کنده
یادم رفت این رو بگم من یک تصویر ماسک هم دارم و قسمت هایی که تو محدوده ماسک قرار دارن فقط مورف میشن

DAMAVAND
جمعه 07 اسفند 1388, 02:02 صبح
ديگه سريعتر از ScanLine نيست مگه چکار داريد ميکنيد
که انقدر طول ميکشه ????? من با پردازش RealTime از دوربين براي روباتيک با سرعت بالاي 70 فريم در ثانيه
هم انجام دادم .بلوک مربوط به ScanLine رو بزاريد اينجا تا ببينم اشکال از کجاست .

gbg
جمعه 07 اسفند 1388, 10:17 صبح
سلام
این تکیه ای که تصویر رو با ماسک چک می کنه


var
tx , ty : Integer;
tpixelm , tpixelp : PRGB32Array;
begin
for ty := 0 to pic.Height-1 do
begin
tpixelm:=mask.ScanLine[ty];
tpixelp:=pic.ScanLine[ty];
for tx := 0 to pic.Width-1 do
if RGB(tpixelm[tx].R,tpixelm[tx].G,tpixelm[tx].B)=clBlack then
CV.Pixels[tx+nx,ty+ny]:=RGB(tpixelp[tx].R,tpixelp[tx].G,tpixelp[tx].B);
end;
cv کانواسیه که قراره رسم روش انجام بشه و mask قسمتیه که باید رسم بشه و pic تصویر نهایی محاسبه شدست
این قسمت که گذاشتم کندترین قسمت هستش شایدبخاطر اینکه رو کانواس دارم با pixel رسم می کنم بقیه قسمت ها سریع هستش
الان سرعت رسم حدود 450 میلی ثانیه فکر کنم میشه 2.2 فریم در ثانیه

gbg
جمعه 07 اسفند 1388, 18:48 عصر
برای رسم از delphiX هم استفاده کردم هنوز کنده ولی خیلی بهتر شده ولی بیشتر بخاطر این که زیاد آشنایی نداشتم نتونستم به خوبی ازش استفاده کنم، شاید بخاطر اینه که درست کار نمیکنه
مثال درست و حسابی و توضیحات سریع و جمع جور هم پیدا نکردم براش

mossaferin
شنبه 08 اسفند 1388, 09:36 صبح
شایدبخاطر اینکه رو کانواس دارم با pixel رسم می کنم

دقیقا به همین دلیله

gbg
شنبه 08 اسفند 1388, 22:41 عصر
خب این تیکه ها رو با اسکن لاین نوشتم ولی کند تر شد
چون تو هر رسم من به کمک تصویر ماسک یه تیکه از تصوریر رو نشون میدم ترکیبی از چند افکت در یک زمان یعنی همین جوری که داره مورف میشه هر لحظه فقط یک قسمت رسم میشه و هر قسمت تقریبا تو یه مربع 70 در 70 قرارمیگیره ( به شکل ستاره،ماه،قلب،برگ) مختصات ماسک و شکل ماسک در هر فریم تصادفی انتخاب میشه و در هر فریم چندین ماسک نمایش داده میشه
به همین دلیل اسکن لاین تعداد بیشتری از نقاط رو الکی بر می گردونه ولی با پیکسل تعداد نقاط کمتری تحت تاثیر قرار میگیرن

mossaferin
یک شنبه 09 اسفند 1388, 15:39 عصر
به همین دلیل اسکن لاین تعداد بیشتری از نقاط رو الکی بر می گردونه ولی با پیکسل تعداد نقاط کمتری تحت تاثیر قرار میگیرن
اسکن لاین در واقع یه اشاره گره به تصویر مد نظر ، که به صورت مستقیم تحت تاثیر قرار میده ، شاید روش استفاده درست نبوده
قائدتا نباید کندتر میشده

http://edn.embarcadero.com/article/29173

gbg
یک شنبه 09 اسفند 1388, 19:43 عصر
ممنون از همه با کمک unDelphiX درستش کردم و سرعت شده 60 فریم در ثانیه، در ابتدا 2 فریم بود.
الان خیلی سریع شده

MohsenB
دوشنبه 10 اسفند 1388, 09:00 صبح
سلام

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


من خیلی دنبال این اطلاعات هستم

ممنون

gbg
دوشنبه 10 اسفند 1388, 18:40 عصر
شرمنده خیلی کلی گفتی
لااقل تا یه جایی برو بگو فلانجا مشکل دارم
به نظر من استفادش برای رسم های سه بعدی و دو بعدی خوبه ولی براس گیم نمی دونم
یه کامپوننت هم برای اسپراست داره اما من تست نکردمش