PDA

View Full Version : معرفی کامپوننتی برای مقایسه 2 عکس با سرعت بالا



BORHAN TEC
چهارشنبه 20 دی 1391, 09:58 صبح
سلام
در حال نوشتن برنامه ای برای مانیتور کردن صفحه نمایش های مربوط به سیستم های یک شبکه هستم. در اینجا یک راه حل خیلی بد این است که در بازه های زمانی مختلف از صفحه نمایش عکس گرفته شود و به سمت سیستم مرکزی فرستاده شود. راه حل دوم این است که در همان کلاینت از صفحه نمایش عکس گرفته شود و با عکس قبلی که به سمت سرور فرستاده شده مقایسه شود و فقط تغییرات به همراه مختصات آنها(که ممکن است ترکیبی از عکسهای کوچکتر است)به سمت سرور فرستاده شود. مشکل اینجاست که اگر رزولوشن مانیتور بالا باشد انجام عمل مقایسه خیلی زمانبر می شود. من به دنبال کامپوننت آماده ای هستم که بتواند این مقایسات را با سرعت بالایی انجام دهد. آیا دوستان کامپوننتی را در این خصوص می شناسند که بالاترین سرعت ممکن را در بین سایر محصولات داشته باشد؟
موفق باشید...

samani
یک شنبه 24 دی 1391, 14:43 عصر
شما ميتونيد از كامپوننت ImageEN مربوط به سايت http://www.hicomponents.com استفاده كني
توي مثالهاش مقايسه دو عكس وجود دارد

مصطفی ساتکی
یک شنبه 24 دی 1391, 16:12 عصر
شما برای انجام اینکار اگر نظیر به نظیر هم پیکسل های 2 فریم متوالی را مقایسه کنید تفاوت را مشاهده می کنید اصلاً نیاز به کامپوننت خاصی ندارید.
هر 3 کانال RGB دو تصویر را از هم کسر کنید و مقادیر اختلاف را در تصویر نتیجه که دارای 3 کانال می باشد بریزید .سپس مقادیر هر 3 کانال را پیمایش کرده و با هم جمع کنید.
در حالتی که هیچ تفاوتی دیده نمیشه یعنی 2 فریم متوالی برابرند نتیجه این جمع صفر میشه و بدترین حالت میزان width* height * height * 3 هستش.
حالا اگر هم مایلید درصدی این اختلاف را مشخص کنید مجموع بدست آمده را تقسیم بر بدترین حالت ممکن کرده در 100 ضرب کنید تا میزان اختلاف را به درصد داشته باشید.

موفق باشید

BORHAN TEC
یک شنبه 24 دی 1391, 16:41 عصر
سلام
با تشکر از شما.
نحوه مقایسه دو تصویر را می دانم ولی در اینجا هدف اصلی من بالا بردن سرعت مقایسه است. مثلاً به دنبال کلاسی مثل TBitmap هستم که سرعت دسترسی به پیکسل های آن نسبت TBitmap بالاتر باشد. البته در این خصوص کلاسی را پیدا کرده ام که سازندگان آن ادعا می کنند که سرعت دسترسی به پیکسل های آن 40 برابر سریعتر از TBitmap می باشد. این هم لینکش:
http://www.davdata.nl/math/xbitmap.html

مصطفی ساتکی
یک شنبه 24 دی 1391, 17:20 عصر
کار خاصی انجام نداده alignment همین bitmap معمولی ویندوز هم 4 هستش تنها تفاوتش این هستش که داده ها را به صورت float می بینه تو بیت مپ هم alignment 4 همینکارو انجام میده فقط یکسری بهینه سازی تو خواندن و نوشتن از cache اعمال میشه اگر هم پروسس پیکسل های به گونه ای نباشه که توالی داشته باشید در انجا هم افت performance خواهید داشت .در windows bitmap اگر مثلا width تصویرتون 14 باشه widthStep برای این تصویر 16 در نظر گرفته میشه. البته توی manual delphi xe3 دیدم گفته شده که میشه به صورت intrinsic از دستورات sse استفاده کرد که در آن صورت بجای 32 بیت می تونید 128 بیت استفاده کنید و سرعت بالاتر هم میره. البته برای نوشتن پیکسل و خواندنش هم مجبورید توابعی بنویسید و زمانیکه هم بخاید تصاویر را به صورت پشت سرهم(ردیفی) پردازش کنید این سرعت چشمگیر خواهد بود.