PDA

View Full Version : حرفه ای: درخواست یک الگوریتم برای یافتن مشابه یک رنگ 24 بیتی در یک جدول رنگ کوچک



Rejnev
یک شنبه 19 اردیبهشت 1389, 01:00 صبح
سلام
این رو به صورت عملی توی صنعت لازم داریم.
پس خواهش میکنم اگه فکر میکنید میتونید کمک کنید، دریغ نکنید.

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

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


color1=RGB(0,50,100)
color2=RGB(100,10,20),...


حالا مثلا میخواید بگردید ببینید نزدیک ترین رنگ به مثلا رنگ (RGB(23,4,70 توی جدول بالا چیه.
من خودم با یک روش پیاده سازی کردم. منتهی خیلی کنده و بهترین جواب رو نمیده.
به این صورت که از یک بازه عددی برای شرط شروع کرده و جدول رو فیلتر میکنیم و تا وقتی که نتیجه فیلتر جدول رکوردی نداشته باشه بازه رو افزایش میدیم.
دوستان چه روشی پیشنهاد میدن؟:لبخندساده:

qwerty11
یک شنبه 19 اردیبهشت 1389, 06:51 صبح
سلام،

لطفاً اول نزدیک ترین رو تعریف کنید. مقایسه رو بر چه اساس انجام میدین !؟ هر کدوم که مجموع فواصلش کمتر باشه !؟ ماکسیمم فاصله ی زوج ب زوجش مینیمم باشه یا .... ؟ خلاصه اول سوالتون رو تکمیل کنین.

و بعدشم حداکثر تعداد رنگ هایی که بوسیله ی ماشین میتونه چاپ بشه چند تاست !؟

Felony
یک شنبه 19 اردیبهشت 1389, 07:17 صبح
تو گوگل مطالب زیادی پیدا میشه : http://www.google.com/search?hl=en&client=opera&hs=Bsc&rls=en&q=convert+24+bit+color+to+8+bit+color&aq=f&aqi=&aql=&oq=&gs_rfai=&prmdo=1

مصطفی ساتکی
یک شنبه 19 اردیبهشت 1389, 11:10 صبح
اگر بخایی علمی کار کنی بایستی با Classification این کار روی انجام بدی و بهترین کار برای انجامش شبکه LVQ (Liner Vector Quantiztion). بایستی از مدل Modular این شبکه استفاده کنی .این طوری نیست به گفته دوستم که نزدیک ترین فاصله رو انتخاب کنیم بهترین رنگه.شاید به رنگ فعلی نزدیک باشه به علت محدود پالت رنگی این انتخاب به رنگ های دیگر آسیب می رسونه. وقتی LVQ این کار رو انجام می ده تحت iteration بالا شبکه همگرا شده به نتیجه مطلوب می رسیم.

Rejnev
یک شنبه 19 اردیبهشت 1389, 12:16 عصر
دوستان
از همگی متچکرم!
تاپیک رو یکمی جابجا کردم. اول بردم توی مهندسی نرم افزار و از اونجا دوباره برش گردوندم همین جا. چرا؟ چون اگه دقت کنید عنوانش عوض شده. این کار رو کردم تا حرف و حدیث پیش نیاد
خب و اما جواب های شما عزیزان
ماشین ما 96 رنگ رو ساپورت میکنه.
یعنی بهش مثلا کد رنگی که توش هست رو میدیم و قطعه رو رنگ میزنه و تحویل میده.
پس در نتیجه باید کدی که بهش میدیم داخلش تعریف شده باشه.
--
بذارید بیشتر توضیح بدم.
فرض کنید شما عکس زیبای خودتون رو به من میدید.
من این عکس رو میخوام در ابعاد مثلا 10 متر در 10 متری روی کاشی های یک سانتی چاپ کنم.دقت کنید که در اینجا هر کاشی نمود یک پیکسل در تصویر ارسالی شما هست.
بعد این کاشی ها رو مثل پازل کنار هم میچینیم و تصویر شکل میگیره.
پس در این مثال ما در هر ردیف 1000 تا کاشی داریم(10 × 1 متر(100 سانت)) که هر کدوم مختصات دارن و ...(به مختصاتش و ... کار نداریم)
پس عکس رو پیکسل به پیکس اسکن میکنیم و رنگش رو به یک رنگ که در دستگاه تعریف شده تبدیل میکنیم.
پس ازین جای کار میشه فهمید که یک رنگ داریم و یک به قول شما پالت رنگها.
حالا الگوریتم درست و درمون که مشابه این رنگ رو توی پالت پیدا کنه لازم دارم.

گفتم روش خودم میومد با یک حلقه هر بار بازه رو بزرگ میکرد و بر اساس اون توی جدول سرچ میکرد و ... که مرتبش نمایی بود! تازه شرط هاش هم یکم مشکل داشت و جالب نبود.
اما جوابی که میداد بد نبود. ولی خیلی کند و بهینه نبود.
OKEYE?

مصطفی ساتکی
یک شنبه 19 اردیبهشت 1389, 15:52 عصر
شما مثل اینکه به جواب دیگران دقت نمی کنید.جواب بقول شما درست درمون همون چیزی که خدمتون عرض کردم البته حذف بیت زائد رو هم می تونید به اون اضافه کنید

nima898
شنبه 25 اردیبهشت 1389, 09:41 صبح
اگه بجای 96 رنگ 64 رنگ داشتیم با حذف نیبل وزن پایین هر رنگ (RGB) مشکل حل میشه

Rejnev
شنبه 25 اردیبهشت 1389, 12:02 عصر
آره بهتره رنگ ها رو هر جور شده گیر بیارم و سعی کنم یک ارتباط و فرمولی براش پیدا کنم.
البته همون راه حلی که در پست اول هم خودم انجام دادم جواب بدی نمیداد. ولی کند بود
از پست 4 هم هیچی سر در نیاوردم!