PDA

View Full Version : پیدا کردن نقطه ها در عکس....



علیرضا110
جمعه 12 شهریور 1395, 18:22 عصر
سلام به دوستان

142361

فرض کنید این نقطه ها قرمز را در عکس می خواهیم پردازش کنیم

و در مرکز هر نقطه می خواهیم یک shape1 یا آیتم قابل جابجا شدن بگذاریم یعنی نقطه اول را باshape1 ونقطه دوم shape2 ونقطه سوم shape3وبه همین ترتیب...

البته من کدی نوشتم که می تواند یک نقطه را پیدا کند و shape در مرکز آن قرار بگیرد ولی برای پیدا کردن بقیه مشکل دارم

لطفا از اساتید در خواست کمک دارم


قسمتی از کدها اینه بقیش الکیه

for Y := 0 to Bitmap.Height - 1 do
begin
Pixels := Bitmap.ScanLine[Y];
for X := 0 to Bitmap.Width - 1 do
begin
C := RGB(
Pixels[X].rgbtRed,
Pixels[X].rgbtGreen,
Pixels[X].rgbtBlue);

if (Pixels[X].rgbtRed = Ra) and (Pixels[X].rgbtGreen = Ga) and (Pixels[X].rgbtBlue = Ba) then
begin
if a=0 then begin
a:=1;
z1:=X;
end;

end else begin
if a=1 then begin
a:=0;
z2:=X-1


Shape1.Left:= (img_4.Left+(z1+(z2-z1) div 2)) - (Shape1.Width div 2);
// Shape1.Top:= (img_4.Top+ (q1+(q2-q1) div 2)) - (Shape1.Height div 2);

علیرضا110
جمعه 12 شهریور 1395, 18:34 عصر
توضیح بیشتر z1 در اصل شروع پیکسل اول از نقطه اوله وz2 پایان پیکسل از هر خط پیکسل میباشد

q1 ردیف پیکسل اول q2ردیف آخرین پیکسل را نشان می دهد


برای بدست آوردن مرکز هم تعداد پیکسل در جهت ایکس و وای را تقسیم بر دو کردم تا مرکز نقطه قرمز بدست بیاید

البته این کد تا زمانی که یک نقطه در تصویر باشد درست کار میکند وقتی چند نقطه باشد درست نمی شود

Ananas
یک شنبه 14 شهریور 1395, 13:03 عصر
سلام.
نقطه ها یک پیکسل هستن فقط؟ ینی مساحت نقطه ممکنه بیشتر از یک پیکسل بشه؟
با یک حلقه شروع کنید بگردید دنبال پیکل هایی که قرمز هستند و بعد پیکسل های همسایشو بسنجید که قرمز نباشند. حالا بسته به اینکه درصد قرمزی چقدر هست باید کد مقایسه رنگ رو بنویسید و بسته به اینکه مساحت نقطه چقدر هست باید همسایگی هارو بسنجید

علیرضا110
دوشنبه 15 شهریور 1395, 18:45 عصر
سلام.
نقطه ها یک پیکسل هستن فقط؟ ینی مساحت نقطه ممکنه بیشتر از یک پیکسل بشه؟
با یک حلقه شروع کنید بگردید دنبال پیکل هایی که قرمز هستند و بعد پیکسل های همسایشو بسنجید که قرمز نباشند. حالا بسته به اینکه درصد قرمزی چقدر هست باید کد مقایسه رنگ رو بنویسید و بسته به اینکه مساحت نقطه چقدر هست باید همسایگی هارو بسنجید

اگر یک پیکسل بود که راحت می شد پیداش کرد مشکلم همینه که بیشتر از یک پیکسل هست
با حلقه هم انجام دادم ولی یا کل پیکسل ها را جمعا پیدا می کنه یا فقط اولی را

یک راه پیدا کردم اینم این که 2حلقه برای پیدا کردن مختصات نقطه ها بکار ببرم یکی x داخل y ,,,و دومی وای داخل ایکس ولی بازم نشد

چیزی که من می خواهم اینه که ردیف غیر رنگ من ( غیرقرمز)(تو عکس زیر سفید )در محور ایکس و وای پیدا بشه تا انتهای هر نقطه محسوب بشه


142415
در تصویر هر مربع چندین پیکسله (یک پیکسل نیست)
فقط نقاط شروع (ایکس و وای) هر مربع ، وطول وعرض مربع ها (که با خط سیاه کشیدم)را می خوام
مشکلی هم با شناسایی رنگ ندارم چون قبلش با کلیک موس روی رنگ آنرا شناسایی می کنه


اگر لطف کنید یک نمونه کد بزازین خیلی عالی میشه

علیرضا110
دوشنبه 15 شهریور 1395, 19:38 عصر
این نمونه کدی است که نوشتم باید روی رنگ مورد نظر کلیک کنید و دکمه دوم را بزنید

دانلود

http://s7.picofile.com/file/8266382242/pixel2.rar.html

این کدها را اصلاح کنید هم خوبه

ابوالفضل عباسی
پنج شنبه 18 شهریور 1395, 10:39 صبح
سلام دوست عزیز
من به کدت نگاه کردم،یکم بد متغیرهارو نامگذاری کردی ،آدم رو گیج میکنه.ولی مشکلش توی حلقه هستش،فرمانی که در button1 نوشته خوب عمل میکنه ولی هنگام کشیدن shape همچی به هم میریزه.من حلقه رو اصلاح کردم ولی دیگه shape نمی کشه تصویر رو می اندازه،ولی این پردازش تصویر نیستا.
چون داری pixel به pixel میکنی،یک نوع مقایسه حساب میشه نه پردازش تصویر،ولی بازم بهت تبریک میگم.

من یک برنامه نوشته ام که میاد دو تصویر رو مقایسه میکنه و درصد تشابه رو میده،ولی پردازش تصویر نیست.برنامه ام کارش خیلی خوبه و سریع مقایسه میکنه،خواستی بگو تا بهت بدهم که ازش الگو بگیری.

الان بنظرم باید برنامه ای بنویسی که یک تصویر جدا کوچیک مثل نقطه بگیره،بعد توی یک تصویر بزرگ هرچی نقطه مثل این هست رو پیدا کنه.به این پردازش تصویر میگن.

حال دوستانی که در این رابطه سورس یا کدی دارند من و علیرضا110 رو یاری کنند.

علیرضا110
پنج شنبه 18 شهریور 1395, 12:02 عصر
سلام
ممنون از راهنماییتون
آن سورس راکه برای مقایسه هستش را بزار ببینم می شه ازش استفاده کنم

البته من تا یک جایی مشکل را حل کردم
ولی مشکل وقتی هستش که دو نقطه یا مربه روبروی هم باشند
یعنی شرطی گذاشتم که اگر ردیف وای به خط سفید رنگی رسید این نقطه یا مربع تمام است وشاپ را با همان مختصات بسازد ولی
اگر مربعی روبری آن باشد مشکل پیش می آید

142448

در تصویر بالا مشکل ندارم ودوتا شاپ می سازد

142449
ولی در این تصویر به خاطر مربعی که روبروی دو مربع هستش هر سه مربع را یک مربع محسوب می کندویک شاپ می سازد که کل مربع ها را در بر می گیرد

علیرضا110
پنج شنبه 18 شهریور 1395, 12:07 عصر
یک راه حل دیگر به ذهنم رسیده که اگر در این مورد هم کمکی کنید

مشکل حل خواهد شد وآن اینکه در ابتدا مربع اول را تشخیص دهد ورنگش را تغییر دهد وبقیه مربع ها همان قرمز بماند
بعد دوباره برای بار دوم فقط مربع دوم را تغییر رنگ دهد و دفعه سوم مربع سوم . دز ضمن رنگ مربع ها با هم فرق کند تا در انتها برای هر مربع یک شاپ بسازیم

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

ابوالفضل عباسی
پنج شنبه 18 شهریور 1395, 12:46 عصر
خب کافیه وقتی داره x , y ها رو پیدا میکنه که با رنگ مربع انتخابی یکی هست پیکسل پیدا شده رو رنگش رو عوض کنه.
وقتی به رنگ دیگری به غیر از رنگ انتخابی برخورد کرد با اون پیکسل کاری نداشته باشد،تا وقتی که به مربع بعدی با همان رنگ انتخابی برسد و مثل قبل تغییر رنگ رو اعمال کند.

علیرضا110
جمعه 19 شهریور 1395, 09:43 صبح
خب کافیه وقتی داره x , y ها رو پیدا میکنه که با رنگ مربع انتخابی یکی هست پیکسل پیدا شده رو رنگش رو عوض کنه.
وقتی به رنگ دیگری به غیر از رنگ انتخابی برخورد کرد با اون پیکسل کاری نداشته باشد،تا وقتی که به مربع بعدی با همان رنگ انتخابی برسد و مثل قبل تغییر رنگ رو اعمال کند.

اگربتونی این کد را بنویسی کار حله یک تستس بکن ببین می تونی بنویسی

ابوالفضل عباسی
شنبه 20 شهریور 1395, 09:03 صبح
برای شکل های مربع و مستطیل درست کار میکنه،ولی شکل از این دو وضعیت خارج باشه خراب کاری میکنه.
خیلی سخت بود تا این جا که نوشته ام، مخم هنگ میکرد:عصبانی:بجای اینکه دلفی هنگ کنه:قهقهه:

علیرضا110
شنبه 20 شهریور 1395, 10:05 صبح
سلام درسته منم پیداش کردم اولش مربع ومسطیل بود بعد تغییرش دادم الان دایره را هم می خونه ولی یک مشکل دیگه پیدا کردم

علیرضا110
شنبه 20 شهریور 1395, 10:27 صبح
الان این پروژه زا می زارم ببینید
در اصل کاری که من می خواستم بکنم این بود که در فریمهای فیلم نقاط شناسایی بشوند وبا پیدا کردن ایکس ووای این حرکات را به کاراکتر سه بعدی انتقال بدم
همون موشن کپچره ولی از طریق فیلم وبکم یا دوربین تا نیاز به کینکت یا ابزارهای گران قیمت نباشد
چون من تو زمینه گرافیک هم کار کردم انیمیشن می دانم خیلی نیاز هستش و اگر چنین کاری بشه یک مشکل بزرگ از سر راه انیماتورها برداشته می شود وکیفیت حرکات بالا می رفت

الان تا اینجا که پیش رفتم بواسطه مقایسه پیکسلها توانستم رنگ نقطه های قرمز را به ترتیب تغییر بدهم ویک شاپ برای آنها درست کنم
مشکلی پیش آمد اینست که در فریم دوم که رنگ نقطه ها جابجا می شود واین باید حل شود

142468


142469


اینم خود پروژه


http://s7.picofile.com/file/8266866584/New_pixel.rar.html

علیرضا110
شنبه 20 شهریور 1395, 10:34 صبح
شایدروی این تصویر بهتر معلوم شود

142471

علیرضا110
شنبه 20 شهریور 1395, 10:40 صبح
نتیجه ای که می خواهم بهش برسم اینه که هر شاپ دنبال یک رنگ در هر فریم حرکت کند وبا پیدا کردن ایکس و وای ساپها وذخیره آنها به عنوان ایکس و وای مدل سه بعدی استفاده شود

golbafan
شنبه 20 شهریور 1395, 13:07 عصر
با توجه به کدهای شما باید بگم روش شما کاملا اشتباه است
شما حتی از فیلتر های ابتدایی مثل canny هم استفاده نکردید
قطعا جواب نخواهید گرفت چراکه ممکنه رنگ ها در تصاویر دریافتی دوربین وب کم شما شدیدا در فریم های مختلف تغییر کنند
برای مثال در فریم اول رنگ قرمز باشه و در فریم دوم صورتی بشه

اگر خیلی با پردازش تصویر آشنایی ندارید حداقل از کتابخانه های رایگان مثل opencv استفاده کنید که البته برای کار شما بهتره قسمت object tracking اش رو ببینید
https://bipuljain.files.wordpress.com/2011/12/color_tracking.png

علیرضا110
شنبه 20 شهریور 1395, 18:39 عصر
با توجه به کدهای شما باید بگم روش شما کاملا اشتباه است
شما حتی از فیلتر های ابتدایی مثل canny هم استفاده نکردید
قطعا جواب نخواهید گرفت چراکه ممکنه رنگ ها در تصاویر دریافتی دوربین وب کم شما شدیدا در فریم های مختلف تغییر کنند
برای مثال در فریم اول رنگ قرمز باشه و در فریم دوم صورتی بشه

اگر خیلی با پردازش تصویر آشنایی ندارید حداقل از کتابخانه های رایگان مثل opencv استفاده کنید که البته برای کار شما بهتره قسمت object tracking اش رو ببینید
https://bipuljain.files.wordpress.com/2011/12/color_tracking.png


باسلام خدمت دوست عزیز مون اگر امکانش باشه یک توضیحی در مورد ای فیلتر بفرمایین البته متوجه شدم که چی میگین منظورتون تشخیص رنگ
در محدوده آن رنگ ماست که فقط شامل قرمز به تنهایی نشود بلکه در محدوده آن را در بر بگیرد تا اگر نور طوری بود که قرمز صورتی شد مشکل پیش نیایید
با توجه به این مطلب شما اگر راهنمایی یا کدبتواند کمکمون کنه بفرمایی ممنون میشم

علیرضا110
شنبه 20 شهریور 1395, 20:03 عصر
بحث ترکینگ آبجکت را هم دیدم این روش برای صورت مثال داره چطور برای بدن یا نقطه ها می توان استفاده کرد

golbafan
دوشنبه 22 شهریور 1395, 01:22 صبح
بحث ترکینگ آبجکت را هم دیدم این روش برای صورت مثال داره چطور برای بدن یا نقطه ها می توان استفاده کرد

این عبارات رو گوگل کنید:
opencv+color tracking
opencv+ball tracking
opencv+hand tracking
و...

https://www.intorobotics.com/9-opencv-tutorials-hand-gesture-detection-recognition/
http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/
http://aishack.in/tutorials/tracking-colored-objects-opencv/
https://sites.google.com/site/ofauckland/examples/10-testing
http://stackoverflow.com/questions/19893506/finger-detection-in-human-hand
https://github.com/bengal/opencv-hand-detection
http://www.entangler.in/hand-gesture-recognition.html

علیرضا110
دوشنبه 22 شهریور 1395, 11:22 صبح
این عبارات رو گوگل کنید:
opencv+color tracking
opencv+ball tracking
opencv+hand tracking
و...

https://www.intorobotics.com/9-opencv-tutorials-hand-gesture-detection-recognition/
http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/
http://aishack.in/tutorials/tracking-colored-objects-opencv/
https://sites.google.com/site/ofauckland/examples/10-testing
http://stackoverflow.com/questions/19893506/finger-detection-in-human-hand
https://github.com/bengal/opencv-hand-detection
http://www.entangler.in/hand-gesture-recognition.html


ممنون از آقای گلبافان عزیز ارز راهنماییتون اگر تو این زمینه چیزی می دونید که به درد می خوره اگه بفرمایین ممنون می شم

علیرضا110
دوشنبه 22 شهریور 1395, 11:32 صبح
تو همون پروژه خودمون به یک مشکل بر خورده بودیم به این که تو فریم دوم چون جای رنگها عوض میشد شاپها جابجا میشدند وروی همون نقطه قبلی قرار نمی گرفتند
برای حل این مشکل یک را حل به نظرم رسید آنهم اینکه از فریم دوم به بعد هر نقطه بیاید ونزدیکترین شاپ به خودش را پیدا کند و همان شاپ با آن نقطه درجهت ایکس و ویای مساوی شوند

یعنی هر شاپ به نزدیکترین نقطه قرمز رنگ خودش بچسبد این در صورتی است که فریمها پشت سر هم هستند ونزدیکترین نقطه همان شاپ خودش میباشد ومشکلی پیش نیاید

حالا کدی می خواهیم که در محدوده ایکس یا وای یک نقطه رابگردد و نزدیکترین شاپ به آن نقطه را پیدا کند و ایکس ووای ساپ مساوی با ایکس وای نقطه بشود که قاعدتا نزدیکترین نقطه 90 درصد همان شاپی بوده که در فریم قبلی با آن مساوی بوده است


اگر دوستان یک همچین کدی دارن بزارن عالی میشه (کدی که نزدیکترین عدد در محدوده عدد مورد نظر را پیدا کند)

مثلا نزدیکترین عدد در محدوده عدد 50 چنده حالا یا 48 است یا 53 است این عدد را بتواند پیدا کند

از کمک لفظی دوستان بسیار سپسگزارم لطفا عملا کمک کنند و نمونه کد بزارند تا بتونیم پروژه را پیش ببریم

علیرضا110
پنج شنبه 25 شهریور 1395, 18:15 عصر
دمتون گرم کسی کمک نمی کنه آقای عباسی کجایی یک کاری بکن

(کدی که نزدیکترین عدد در محدوده عدد مورد نظر را پیدا کند)

نزدیکترین عدد به عدد 50 از بین

1
2
..
99
100
چیزی که باید نشون بده عدد 49 ویا 51 است

بابا مهندسا کجاند

یوسف زالی
شنبه 27 شهریور 1395, 09:33 صبح
سلام.
اگر منظور شما نزدیک ترین عدد به یک عدد خاص است، می تونید اون رو با تمام اعداد تفریق کرده قدر مطلق گرفته و کمترین عدد رو پیدا کنید.
اگر منظور شما نزدیک ترین کد رنگی به رنگ مورد نظرتونه، باید از معادله فاصله در سه بعد استفاده کنید.

علیرضا110
شنبه 27 شهریور 1395, 17:32 عصر
سلام
مورد اول هستش

اگر بتونید یک نمونه کد کوچیک از نحوه عملکردش بزارین تا بتونم توسعه اش بدم خیلی عالی می شه

بسیار ممنون از راهنمایتون جناب آقای زالی گل

یوسف زالی
شنبه 27 شهریور 1395, 17:54 عصر
سلام.
فرض می کنم داده هات سورت نیستند:


procedure TForm1.Button1Click(Sender: TObject);
var
Arr: array [1..10] of integer;
X, i, MinDs, MinID: integer;
begin
Arr[1] := 5;
Arr[2] := 15;
Arr[3] := 2;
Arr[4] := 80;
Arr[5] := 13;
Arr[6] := 2;
Arr[7] := 90;
Arr[8] := 44;
Arr[9] := 32;
Arr[10] := 11;


X := 23;


MinDs := MaxInt;


for i := 1 to 10 do
if abs(Arr[i] -X) < MinDs then
begin
MinDs := abs(Arr[i] -X);
MinID := i;
end;


ShowMessage(IntToStr(Arr[MinID]));
end;

علیرضا110
یک شنبه 28 شهریور 1395, 20:11 عصر
دمت گرم اتفاقا سورت نیستند

ابوالفضل عباسی
دوشنبه 29 شهریور 1395, 09:11 صبح
سلام شرمنده،چند روز بود درگیر شبکه بودم.

خیلی خوب پیش رفتی.این کدی اقا یوسف بهت داد،کارت رو راه نمی اندازه،چون این برای ریاضی هست نه رنگ.
باید از معادله فاصله در سه بعد استفاده بکنی،چون گفتی فضا سه بعدی هست.

ولی یه راهنمایی شاید بدرد بخوره.الان موقعیت رنگ مربع ها را در یک جا ذخیره کن و موقعیت دایره هایی که در جای درست قرار نگرفته اند را هم ذخیره کن(همه ی این ها باید رنگشان هم ذخیره باشه)
حالا مثل یک حلقه کار کن ببین اولین دایره به کدوم مربع نزدیک تره(از طریق جمع و تفریق فاصله x,y گوشه پایین یا بالا مربع ها)مثلا:

AB=رادیکال(Y22-Y12)+(X22-X12)

(کل عبارت زیر رادیکال هست)
بعد این AB هارو مقایسه کن ببین کدام مربع تا دایره AB کمتری داره.بعد رنگ دایره رو رنگ همان مربعی کن که از طریق AB فهمیدی بهش نزدیکتره.
بشرطی که در حلقه بعدی،مربع قبلی دوباره استفاده نشه.

روش پیچیده است،اما درکش ساده و راحتتر به جواب میرسی. فقط توی یک آرایه باید AB های مختلف رو بریزی و کوچکترین رو استخراج کنی.(حتما متغیر ها رو باید از نوع Double تعریف کنی،چون اعشار هم جز AB ها میشه.)

یوسف زالی
دوشنبه 29 شهریور 1395, 13:47 عصر
چون گفتی فضا سه بعدی هست.


چه ارتباطی داره عزیز من؟
چون فضا سه بعدی هست باید از اختلاف در سه بعد استفاده بشه؟!!!

در پیدا کردن نزدیک ترین رنگ به رنگ مورد نظر، چون هر رنگ از سه رنگ اصلی ساخته می شه، هر رنگ اصلی یک نمودار رو تشکیل می ده و می شه معادله فاصله در سه بعد. یعنی بعد آبی، بعد قرمز و بعد سبز.

اگر این راه کار شما رو راه می اندازه نمونه کد رو براتون بگذارم. خیلی ساده است.

علیرضا110
دوشنبه 29 شهریور 1395, 18:31 عصر
سلام شرمنده،چند روز بود درگیر شبکه بودم.

خیلی خوب پیش رفتی.این کدی اقا یوسف بهت داد،کارت رو راه نمی اندازه،چون این برای ریاضی هست نه رنگ.
باید از معادله فاصله در سه بعد استفاده بکنی،چون گفتی فضا سه بعدی هست.

ولی یه راهنمایی شاید بدرد بخوره.الان موقعیت رنگ مربع ها را در یک جا ذخیره کن و موقعیت دایره هایی که در جای درست قرار نگرفته اند را هم ذخیره کن(همه ی این ها باید رنگشان هم ذخیره باشه)
حالا مثل یک حلقه کار کن ببین اولین دایره به کدوم مربع نزدیک تره(از طریق جمع و تفریق فاصله x,y گوشه پایین یا بالا مربع ها)مثلا:

AB=رادیکال(Y22-Y12)+(X22-X12)

(کل عبارت زیر رادیکال هست)
بعد این AB هارو مقایسه کن ببین کدام مربع تا دایره AB کمتری داره.بعد رنگ دایره رو رنگ همان مربعی کن که از طریق AB فهمیدی بهش نزدیکتره.
بشرطی که در حلقه بعدی،مربع قبلی دوباره استفاده نشه.

روش پیچیده است،اما درکش ساده و راحتتر به جواب میرسی. فقط توی یک آرایه باید AB های مختلف رو بریزی و کوچکترین رو استخراج کنی.(حتما متغیر ها رو باید از نوع Double تعریف کنی،چون اعشار هم جز AB ها میشه.)

سلام به دوستان عزیزم
ابوالفضل جان مشکل اینه که تو فزیم دوم وقتی عکس دوم لود میشه همگی همون قرمز هستند و رنگهای قبلی از بین می رند
و اگر دوباره همون کد را برای تغییر رنگ اجرا کنیم جایگاه رنگها با فرق می کنن یعنی اگر قسمت دستش قبلا آبی بوده الان (تو فریم دوم) سبز خواهد بود به خاطر همین به هم می ریزه

علیرضا110
دوشنبه 29 شهریور 1395, 18:39 عصر
کاری که من پیش بردم اینه که مکان شاپها را در فزیم اول بدست آوردم ودر فریم دوم ایکس وای هر دایره را با تمام شاپها مقایسه میکنم
هر شاپی که نزدیکتر به آن باشد ،ایکس وای همان شاپ را با دایر مماس میکنم تا نزدیکترین ایکس وای شاپ به نزدیکترین ایکس وای دایره مساوی شود

علیرضا110
دوشنبه 29 شهریور 1395, 18:56 عصر
کد آقای زالی به درد خورد

فقط یک جای دیگه گیر افتادم آنهم اینکه نزدیکترین عدد به نقطه قرمز ما دوبار باید بررسی کند یکباربا ایکس شاپ ویکبار با وای شاپ هر دو هم خوب انجام می گیرد
ولی نتیجه ای که باید بدهد نمی دهد

یعنی کدی می خواهم که از ایکس و وای یک شاپ ، عدد تگ را بدست آورد

ما ایکس وای شاپ را داریم از ایکس وای به عدد تگ شاپ می خواهیم برسیم

اگر چنین کدی را کمک کنید امیدوارم جایی دیگه گیر نیفتیم وکار حل خواهد شد

علیرضا110
دوشنبه 29 شهریور 1395, 19:10 عصر
مثلا if (shape[i].left=12) and (shape[i]. top =45) then
begin
k:= shape[i].tag;

end;


می خواهم ببینم اصلا می شه از ایکس و وای یک آبجکت به تگش رسید یا نه؟

فکر کنم از طریق بررسی contorol ها بشود این کار ار کرد ولی دقیقا نمی دونم کدش چی باید باشه

باید هر دو را با هم همزمان بررسی کند( x ,y )را، اگر فقط یکی را بررسی کند مثلا فقط ایکس را بررسی کند ممکن است شاپ دیگری هم ایکسش با آن یک ی باشد ولی وقتی هردو بررسی شود
وعدد تگ را بدست آورد احتمال خطا کم می شود

با وجود x و y شماره تگ ابجکت را می خواهیم بدست بیاوریم

golbafan
سه شنبه 30 شهریور 1395, 16:24 عصر
سلام

function form1.findtag(x,y:integer):integer;
begin
for I := 0 to ComponentCount-1 do
if Components[i] is TShape then
if (Tshape(Components[i]).left=x) and (Tshape(Components[i]). top =y) then
result:=TShape(Components[i]).Tag
end;

ولی بازهم میگم اگر بخواهید از دوربین استفاده کنید تا حرکات شخص رو به حالت 3 بعدی در بیارید مثل کاری که microsoft kinnect میکنه... این کارها جواب نمیده و باید از انجین های پردازش تصویر گرافیکی مثل opencv استفاده بکنید

علیرضا110
سه شنبه 30 شهریور 1395, 23:25 عصر
دمت گرم ممنونم
آره می دونم البته نرم افزار های مربوط به کینکت هم موجوده
و می شه گیرشون آورد وبا کینکت کار کرد،من خودم از کینکت بارها استفاده کردم
ولی به چند دلیل می خواهم این کار رابکنم
اول اینکه با وجود کینکت، حرکتی که تولید می شود برای مدل سه بعدی نویز داره ولرزش
وبرای درست عمل کردن نیاز به دو یا سه کینکت هست تا نویز برطرف بشود وبا یک کینکت کاری پیش نمیبریم
جزیک نرم افزار حرکت صورتکه وقتی باهاشکار کردم تقریبا خوب عمل می کرد اسمش هم فیس شیفت هستش

دوم اینکه با استفاده از این تکنیک برای کینکت که وسیله ای است که عمق وبعد سوم را تشخیص می دهد می باشد
در صورتی که کاری که می خواهیم بکنیم به وسیله یک فیلم معمولی بدون عمق وبعد سوم می خواهیم انجام بدهیم

سوم اینکه این ابزارها گران قیمتند ،واگر از صفر بتوانیم چنین چینشی را انجام بدهیم همه تو دست خودمون هست و می توانیم تغییر وتبدیلش بدیم

امیدواریم این راه جواب بده البته با کمک شما دوستان

ویک ایده ای است که ممکنه اصلا به قول شما اشتباه باشه (خودم هم گاهی این فکر می کنم)

ولی اگر جواب بده (واینه که باعث میشه ادامه بدم) نهایتا نمیشه ویک تجربه به تجربیاتمون اضافه شده

امید داریم جواب بده ،به یاری خدا و با کمک شما عزیزان

golbafan
چهارشنبه 31 شهریور 1395, 08:53 صبح
سلام
البته منظور من این نیست که از کینکت استفاده بکنید
بلکه منظورم اینه که اگر بخواهید روی تشخیص حرکات شخص با استفاده از دوربین معمولی و بر اساس رنگ تمرکز کنید ، باید از تکنیک های آبجکت ترکینگ (مشابه opencv) استفاده کنید

البته بدلایلی هنوز هم معلوم نشده شما دقیقا میخواهید چکار کنید تا بتونم بهتر راهنماییتون بکنم
ولی اگر بخواهید کاری مثل face shift رو انجام بدید و حرکات صورت رو بنشونید روی حالت 3 بعدی پیاده کنید ، راههای بهتری برای انجامش هست و شما باید دنبال روشهای مبتنی بر 3d face feature برید
برای شروع میتونید از اینجا هم دیدن کنید: http://golbafan.webs.com
(http://golbafan.webs.com)

"face feature extraction opencv " و "facial landmark" را هم گوگل کنید نتایج خوبی خواهید گرفت

http://www.learnopencv.com/facial-landmark-detection/

علیرضا110
پنج شنبه 01 مهر 1395, 23:11 عصر
سلام آقای گلبافان عزیز

کاری که می خواهم انجام دهم فقط تشخیص حرکات بدن از روی فیلم

در حالی که به قسمتهای بدن یک رنگ خاص مثل قرمز چسبیده باشد (مثلا کف دست یک رنگ قرمز ،آرنج یک رنگ قرمز وجاهایی که کلیدی هستند)

تا زمانی که آنها حرکت می کنند همان حرکت را به کاراکتر سه بعدی انتقال بدهیم ومثلا رنگ قرمز کف دست به اسکلت کف دست مدل سه بعدی انتقال پیدا کند
حالا بحث انتقال به مدل سه بعدی را فعلا کاری نداریم

الان فقط می خواهیم نقاط قرمز روی فیلم که(یکسری مثلا چسب قرمز رنگ هستند که به اعضای اصلی بدن که قابلیت خم شدن یا حرکت دارند وصل است) را تشخیص بدیم

واین نقاط قرمز را هر کدام را به طور جدا گانه ایکس و وای آنرا بدست بیاوریم حالا فعلا محور z را کاری نداریم فقط محور x ومحور y را می خواهیم بدانیم

یعنی ایکس و وای هر نقطه را نیاز داریم تا به نقاط ایکس وای مدل سه بعدی انتقال بدیم

انشالله فهمیده باشی چی می گم اگر بازم متوجه مطلب نشدی بگو رو تصویر بهت میگم

تنها چیزی که می خام فقط ایکس وای هر نقطه در هر فریم فیلم هست که آنها را ذخیره وبعد از آنها استفاده کنم

اگر راهنمایی کنی خیلی عالیه چون خیلی دوست دارم راهی برای این مشکل پیدا بشه

ممنون از شما وهمه دوستان که کمک می کنند

golbafan
پنج شنبه 01 مهر 1395, 23:59 عصر
انشالله فهمیده باشی چی می گم اگر بازم متوجه مطلب نشدی بگو رو تصویر بهت میگم
تنها چیزی که می خام فقط ایکس وای هر نقطه در هر فریم فیلم هست که آنها را ذخیره وبعد از آنها استفاده کنم
اگر راهنمایی کنی خیلی عالیه چون خیلی دوست دارم راهی برای این مشکل پیدا بشه


سلام

اتفاقا من خوب میدونم میخوای چکار کنی
شما حرف من رو جدی نگرفتی

گفتم با این کارها به جواب نمیرسی
بنظرت اگه طرف دستهاشو از کنار هم یا از روی هم حرکت بده میخوای چکار کنی؟
یا مثلا اگر بخواد بچرخه بطوری که برای چند فریم پیاپی اون چسب های قرمز توی کادر نباشن
فکر میکنی میتونی تاثیر نور رو به همین راحتی نادیده بگیری؟
فکر میکنی وقتی دستهاش رو حرکت میده همیشه با یک مربع قرمز طرف هستی؟؟؟ یا اینکه ممکنه تبدیل به یک لوزی صورتی بشه؟
هیچ فکر کردی اگر عقب و جلو بره این چسب قرمز کوچک و بزرگ میشه؟؟؟
اصلا تا حالا به نویز موجود در تصاویر دیجیتال دقت کردی؟؟؟

بجای این کارها بهتره آبجکت ترکینگ رو پیاده سازی کنی
راحت ترین راهش هم استفاده از opencv هست
لینکهای قبلی رو هم برای همین بهت دادم (پست 16 و 19 رو ببین)

---------
این فیلم رو هم ببین (تشخیص حرکات بدن از روی فیلم با opencv و تنها با استفاده از وبکم معمولی)
بدون استفاده از چسب کاری!!!
https://www.youtube.com/watch?v=OfDdNv-bMBo



این فیلم هم بهت آموزش میده چطوری با استفاده از چسبکاری کارت رو انجام بدی
https://www.youtube.com/watch?v=bSeFrPrqZ2A

علیرضا110
جمعه 02 مهر 1395, 09:51 صبح
سلام درسته
اینطوری نتیجه نمی گیرم

ولی برای جلو و عقب شدن برچسبها فکر کردم می توانیم از اندازه ای که شروع می شود (فریم اول)صفر محسوب شود و اگر چسب بزرگ شود محور z+ مثبت شود
واگر دور شود محورش منفی شود وبا استفاده از این تکنیک محور زد را هم بتوانیم درست کنیم

وتو محور ایکس و وای اندازه ملاک نباشد فقط مکان ملاک باشد

فقط تنها مشکل زمانی بود که برچسبها روی هم می آمدند واین مشکل را می خواستم با تغییر رنگ حل کنم که ظاهرا به این ساده گی نیست

به هر حال ممنونم از زاهنماییتون

اگر اطلاعات دیگری تو این زمینه پیدا کردین بدین عالی میشه مخصوصا کدی در این رابطه

فیلمهارا هم دیدم دقیقا یک همچین چیزی می خواهم اگر بشود عالیه

کجا می تونم کدها یا نمونه ای از این کتابخانه پیدا کنم خود کامپوننت ش را کجا می تونم دانلود کنم
opencv (http://barnamenevis.org/#)

بازم ممنون

علیرضا110
جمعه 02 مهر 1395, 11:53 صبح
این فایلهای مربوطه را پیدا کردم ولی کامل نیست
میشه راهنمایی کنید

* OpenCV_Core.pas
* OpenCV_ImgProc.pas
* OpenCV_Legacy.pas
* OpenCV_HighGui.pas
* OpenCV_Types.pas
* OpenCV_Utils.pas
* OpenCV_MachineLearning.pas
* OpenCV_GPU.pas
* OpenCV_Features.pas
* OpenCV_ObjDetect.pas
* OpenCV_Video.pas
* OpenCV_Calibration.pas

golbafan
جمعه 02 مهر 1395, 18:19 عصر
این فایلهای مربوطه را پیدا کردم ولی کامل نیست
میشه راهنمایی کنید

* OpenCV_Core.pas
* OpenCV_ImgProc.pas
* OpenCV_Legacy.pas
* OpenCV_HighGui.pas
* OpenCV_Types.pas
* OpenCV_Utils.pas
* OpenCV_MachineLearning.pas
* OpenCV_GPU.pas
* OpenCV_Features.pas
* OpenCV_ObjDetect.pas
* OpenCV_Video.pas
* OpenCV_Calibration.pas

خب حالا شدی پسر خوب...

opencv_master رو از github دانلود کن (نسخه دلفی)
تمام موارد مورد نیازت رو اونجا ببین

https://github.com/Laex/Delphi-OpenCV

علیرضا110
جمعه 02 مهر 1395, 21:33 عصر
سلام اگر در مورد نصبش یک توضیحی بدی عالیه دلفیم 7 هنگام نصب کامپوننت ارر می ده
چطوری نصب می شه؟

golbafan
شنبه 03 مهر 1395, 22:16 عصر
چه اروری میده؟
شاید باید محل پوشه سورس رو در کتابخانه تعریف کنی

علیرضا110
یک شنبه 04 مهر 1395, 09:18 صبح
چه اروری میده؟
شاید باید محل پوشه سورس رو در کتابخانه تعریف کنی


142756

142757

ارور ها اینها هستند

تعریف پوشه سورس در کتابخانه چطوریه؟

golbafan
یک شنبه 04 مهر 1395, 18:47 عصر
بعلت تنظیم نبودن فایل opencv.inc کامپایلر دلفی 7 و 2009 جابجا شده

pointermath off رو استفاده کن

https://helloacm.com/pointer-arithmetic-in-delphi/

علیرضا110
یک شنبه 04 مهر 1395, 19:18 عصر
بعلت تنظیم نبودن فایل opencv.inc کامپایلر دلفی 7 و 2009 جابجا شده

pointermath off رو استفاده کن

https://helloacm.com/pointer-arithmetic-in-delphi/

سلام ممنونم

ولی متوجه نشدم تو این سایت باید چکار کرد
چیزی برای دانلود نبود
می شه یک توضیح در موردش بدی
ممنون

nerset
یک شنبه 04 مهر 1395, 21:19 عصر
با سلام
به نظر من در صورتی می خواهید به صورت ارزان قیمت و از طریق شناسایی رنگ نقاط رنگی موجود در فریم های هر تصویر یک نمونه دیجیتالی را به حرکت در آورید بهترین و راحت ترین روش استفاده از لامپ های ال ای دی رنگی است که بر روی نقاط مورد نظر حرکتی فرد مدل در حالی که لباس کاملا مشکی پوشیده و در یک محیط نیمه تاریک قرار گرفته ، نصب شده باشد و سپس با برنامه ای که با تعیین گستره رنگی مربوط به نور این نقاط را در هر فریم شناسایی کرده و محل هر یک از آنها را در یک آرایه جمع آوری می کند این کار را انجام داد و البته در صورتی که تعداد اجزای حرکتی زیاد باشد هم می توان از ال ای دی های هفت رنگ استفاده کرد و یا اینکه از دو یا سه ال ای دی با رنگ های مختلف در نقطه استفاده کرد و سپس با استفاده از روش فاصله یابی پیکسلی نور ال ای دی های مختلف را شناسایی و گروه هر یک از ال ای دی ها را تعیین نمود که با این روش می توانید تعداد زیادی از نقاط حرکتی را ردیابی نمود.
البته جهت شناسایی رنگ نقاط موجود در هر فریم هم می توانید از روش شناسایی رنگ پیکسل های موجود در صفحه نمایش (مانیتور) و یا موجود در فایل عکس مربوط به هر فریم استفاده کرد که شخصا روش خواندن رنگ پیکسل از روی فایل ذخیره شده عکس و به خصوص نوع bmp را ترجیح می دهم چون این روش بسیار سریعتر ولی نوشتن برنامه برای آن سخت تر از روش های دیگر می باشد. همچنین توصیه می کنم که برای نوشتن برنامه مورد نیاز سعی کنید که توابع مورد نیاز را خودتان طراحی کنید و کمتر از توابع آماده ویندوزی استفاده کنید تا در آینده بتوانید تغییرات مورد نظر را به راحتی اعمال کنید.
در صورتی که نتوانید بدون کمک از دیگران چنین برنامه ای را بنویسید ، به احتمال زیاد در این کار چندان موفق نخواهید شد چون این قضیه ساده ترین و در عین حال اساسی ترین مبانی مربوط به برنامه نویسی گرافیک دو بعدی است پس توصیه می کنم که در مورد نوشتن این برنامه زیاد به دیگران اتکا نکنید و با تجربه آزمون و خطا و نتیجه گیری منطقی و پشتکار ، استعداد عظیمی که خداوند به هر انسانی عنایت کرده را دست کم نگیرید و آن را شکوفا کنید.
به هر حال امیدوارم که با امید به خدا و همت و کوشش در انجام این کار موفق شوید.

golbafan
دوشنبه 05 مهر 1395, 22:58 عصر
سلام ممنونم

ولی متوجه نشدم تو این سایت باید چکار کرد
چیزی برای دانلود نبود
می شه یک توضیح در موردش بدی
ممنون

سلام

این نسخه opencv برای دلفی 2009 به بالاست
توصیه میکنم آخرین نسخه های دلفی رو بگیرید

دلفی 7 برای خیلی کارها قدیمی شده
اما اگر میخواهید حتما دلفی 7 استفاده کنید باید pointermath رو حذف کنید چون در کامپایلر دلفی 7 این مورد وجود نداره

(دقت کنید قبل از نصب کامپوننت ها باید اول خود opencv رو نصب کرده باشید)

علیرضا110
سه شنبه 06 مهر 1395, 09:48 صبح
(دقت کنید قبل از نصب کامپوننت ها باید اول خود opencv رو نصب کرده باشید)

با تشکراز شما
نرم افزار خاصیه که باید نصب بشه؟ کجا باید دانلود کنم؟

hp1361
سه شنبه 06 مهر 1395, 12:10 عصر
سلام

بخاطر جدیت و پیگیری بهتون تبریک میگم. امیدوارم به نتیجه برسید

دانلود OpenCV (https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.13/opencv-2.4.13.exe/download)

موفق باشیم

علیرضا110
چهارشنبه 07 مهر 1395, 10:19 صبح
باسلام وتشکر فراوان خدمت دوستان عزیز

تابعی سراغ دارید که محدوده یک رنگ را بدست بیاوردمثلا رنگ قرمز را تا محدوده صورتی پیدا کنه
اگر تابع مستقلی برای این کار باشه عالی میشه

nerset
پنج شنبه 08 مهر 1395, 11:14 صبح
با سلام
من با ویژوال بیسیک 6 کار می کنم که تابع زیر رنگ نقطه مورد نظر در فرم را می گیرد و در متغیر color که از نوع (Long) می باشد ذخیره می کند که البته احتمالا می توان در همان ابتدا به صورت جزء به جزء قرمز و سبز و آبی هم آن را بدست آورد که من بلد نیستم و همچنین در مورد گرفتن رنگ پیکسل یک فریم ویدیویی هم اطلاعی ندارم چون این تابع در VB6 می تواند رنگ یک عکس موجود در فرم را بدست آورد.
color = Point (x, y
به هر حال بعد از بدست آمدن عدد رنگی بزرگ که در متغیر (Long) ذخیره شده است این مقدار توسط سه تابع کوچک تفکیک کننده این عدد رنگی به سه جز رنگی قرمز و سبز و آبی تفکیک می شوند و برای بدست آوردن یک محدوده رنگ باید تعیین کرد که کدام یک از اجزای رنگی برای رسیدن به رنگ دوم باید تغییر کنند مثلا اگر بخواهیم که محدوده رنگی از رنگ قرمز خالص تا صورتی را بدست آوریم باید بدانیم که در رنگ قرمز خالص جزء قرمز برابر 255 و دو جزء سبز و آبی برابر 0 هستند ولی در رنگ صورتی جزء قرمز برابر 255 و دو جزء سبز و آبی هر دو با هم و به طور یکسان تغییر کرده و می توانند عددی برابر با 0 تا 255 را داشته باشند چون رنگ صورتی رنگی است که بین رنگ قرمز خالص تا سفید خالص می تواند وجود داشته باشد و حتما باید دو متغییر سبز و آبی در این محدوده به طور یکسان تغییر داشته باشند.
همچنین برای داشتن دیگر محدوده های رنگی باید دید که می خواهیم بین چه رنگ هایی محدوده را تعیین کنیم مثلا برای داشتن محدوده رنگی از قرمز خالص تا بنفش خالص فقط رنگ آبی تغییر می کند و رنگ سبز همچنان صفر باقی می ماند.
احتمالا روش های ساده تر و بهتری هم برای این کار وجود دارد که امیدوارم پیدا کنید همچنین همان طور که گفته شد این تابع در ویژوال بیسیک 6 کاربرد دارد ولی روش گفته شده برای بدست آوردن محدوده رنگ در تمام زبان های برنامه نویسی می تواند کاربرد داشته باشد.

علیرضا110
شنبه 24 مهر 1395, 07:44 صبح
با سلام نتیجه نگرفتم
نصب نشد
کارمون هم حل نشد
باید رهی پیدا بشه
انشالله

ابوالفضل عباسی
دوشنبه 03 آبان 1395, 12:56 عصر
من نسخه اخر opencv که برای نصب و کرک شده بود رو روی دلفی نصب کردم ولی درست کار نمیکنه.:متفکر:

hp1361
سه شنبه 04 آبان 1395, 13:19 عصر
با سلام نتیجه نگرفتم
نصب نشد
کارمون هم حل نشد
باید رهی پیدا بشه
انشالله

سلام

من روی دلفی برلین نصب کردم. البته باید طبق راهنمایی هایی که توی صفحه دانلودش گذاشته، فایل های مورد نیازش رو در پوشه system32 بریزید تا کامل نصب بشه.

البته هنوز فرصت نکردم کامپوننت هاش رو تست کنم

موفق باشیم