নতুন আইটিউনস 11-এ অ্যালবামের গানের তালিকার জন্য খুব সুন্দর ভিউ রয়েছে, অ্যালবামের কভারের ফাংশনে ফন্ট এবং পটভূমির জন্য রঙ বেছে নেওয়া। অ্যালগরিদম কীভাবে কাজ করে তা কেউ বুঝতে পেরেছেন?
নতুন আইটিউনস 11-এ অ্যালবামের গানের তালিকার জন্য খুব সুন্দর ভিউ রয়েছে, অ্যালবামের কভারের ফাংশনে ফন্ট এবং পটভূমির জন্য রঙ বেছে নেওয়া। অ্যালগরিদম কীভাবে কাজ করে তা কেউ বুঝতে পেরেছেন?
উত্তর:
আমি ম্যাথমেটিকায় আইটিউনস 11 রঙের অ্যালগরিদমটি আনুমানিক হিসাবে অ্যালবামের কভারটি ইনপুট হিসাবে দিয়েছি:
পরীক্ষার এবং ত্রুটির মধ্য দিয়ে আমি একটি অ্যালগরিদম নিয়ে এসেছি যা ~ 80% অ্যালবামের সাথে কাজ করে যা আমি এটি পরীক্ষা করেছি।
অ্যালগরিদমের বেশিরভাগ অংশই একটি চিত্রের প্রভাবশালী রঙ সন্ধান করে। প্রভাবশালী রঙগুলি সন্ধানের একটি পূর্বশর্ত তবে দুটি রঙের মধ্যে একটি পরিমাণ নির্ধারণযোগ্য পার্থক্য গণনা করছে। দুটি রঙের মধ্যে পার্থক্য গণনা করার একটি উপায় হ'ল আরজিবি রঙের জায়গাতে তাদের ইউক্লিডিয়ান দূরত্ব গণনা করা। তবে, আরজিবি রঙের জায়গার দূরত্বের সাথে মানুষের রঙ উপলব্ধি খুব ভাল মেলে না।
অতএব, আমি আরজিবি রঙগুলিকে (আকারে {1,1,1}
) YUV তে রূপান্তর করার জন্য একটি ফাংশন লিখেছিলাম , এটি একটি বর্ণের স্থান যা রঙ উপলব্ধি অনুমানের তুলনায় অনেক ভাল:
(সম্পাদনা: @ ক্রমুলিয়ান এবং @ ড্রেক উল্লেখ করেছেন যে ম্যাথমেটিকার অন্তর্নির্মিত সিআইএলএবি এবং সিআইইলইউভিওর রঙের স্থানগুলি যথাযথ হবে ... দেখে মনে হচ্ছে আমি এখানে চাকাটিকে কিছুটা নতুনভাবে আবিষ্কার করেছি)
convertToYUV[rawRGB_] :=
Module[{yuv},
yuv = {{0.299, 0.587, 0.114}, {-0.14713, -0.28886, 0.436},
{0.615, -0.51499, -0.10001}};
yuv . rawRGB
]
এরপরে, আমি উপরের রূপান্তরটির সাথে রঙের দূরত্ব গণনা করতে একটি ফাংশন লিখেছিলাম:
ColorDistance[rawRGB1_, rawRGB2_] :=
EuclideanDistance[convertToYUV @ rawRGB1, convertToYUV @ rawRGB2]
আমি দ্রুত আবিষ্কার করেছি যে বিল্ট-ইন ম্যাথমেটিকা ফাংশন DominantColors
আইটিউনস যে অ্যালগরিদম ব্যবহার করে তা আনুমানিকভাবে যথেষ্ট সূক্ষ্ম কন্ট্রোল নিয়ন্ত্রণের অনুমতি দেয় না। পরিবর্তে আমি আমার নিজস্ব ফাংশন লিখেছি ...
একদল পিক্সেলের প্রভাবশালী রঙ গণনা করার একটি সহজ পদ্ধতি হ'ল সমস্ত পিক্সেলকে একই রঙের বালতিতে সংগ্রহ করা এবং তারপরে বৃহত্তম বালতিটি সন্ধান করা।
DominantColorSimple[pixelArray_] :=
Module[{buckets},
buckets = Gather[pixelArray, ColorDistance[#1,#2] < .1 &];
buckets = Sort[buckets, Length[#1] > Length[#2] &];
RGBColor @@ Mean @ First @ buckets
]
নোটটি .1
হ'ল বিভিন্ন রঙকে পৃথক হিসাবে বিবেচনা করতে হবে তার সহনশীলতা। আরও মনে রাখবেন যে ইনপুটটি কাঁচা ট্রিপলেট আকারে পিক্সেলের একটি অ্যারে ( {{1,1,1},{0,0,0}}
) হলেও আমি RGBColor
অন্তর্নির্মিত DominantColors
ফাংশনটিকে আরও ভালভাবে অনুমান করার জন্য একটি গাণিতিক উপাদান ফেরত দেব ।
আমার আসল ফাংশন প্রদত্ত অন্য রঙিন ফিল্টার করার পরে প্রভাবশালী রঙগুলিতে DominantColorsNew
ফিরে আসার বিকল্প যুক্ত করে n
। এটি প্রতিটি রঙের তুলনার জন্য সহনশীলতা প্রকাশ করে:
DominantColorsNew[pixelArray_, threshold_: .1, n_: 1,
numThreshold_: .2, filterColor_: 0, filterThreshold_: .5] :=
Module[
{buckets, color, previous, output},
buckets = Gather[pixelArray, ColorDistance[#1, #2] < threshold &];
If[filterColor =!= 0,
buckets =
Select[buckets,
ColorDistance[ Mean[#1], filterColor] > filterThreshold &]];
buckets = Sort[buckets, Length[#1] > Length[#2] &];
If[Length @ buckets == 0, Return[{}]];
color = Mean @ First @ buckets;
buckets = Drop[buckets, 1];
output = List[RGBColor @@ color];
previous = color;
Do[
If[Length @ buckets == 0, Return[output]];
While[
ColorDistance[(color = Mean @ First @ buckets), previous] <
numThreshold,
If[Length @ buckets != 0, buckets = Drop[buckets, 1],
Return[output]]
];
output = Append[output, RGBColor @@ color];
previous = color,
{i, n - 1}
];
output
]
প্রথমে আমি দ্বিপাক্ষিক ফিল্টার সহ অ্যালবামের কভার ( 36px
, 36px
) এবং হ্রাস বিশদটি পুনরায় আকার দিয়েছি
image = Import["http://i.imgur.com/z2t8y.jpg"]
thumb = ImageResize[ image, 36, Resampling -> "Nearest"];
thumb = BilateralFilter[thumb, 1, .2, MaxIterations -> 2];
আইটিউনস অ্যালবামের প্রান্তগুলি সহ প্রভাবশালী রঙটি সন্ধান করে পটভূমির রঙ বেছে নেয়। তবে এটি চিত্রটি ক্রপ করে সংকীর্ণ অ্যালবামের কভার সীমানাকে উপেক্ষা করে।
thumb = ImageCrop[thumb, 34];
এর পরে, আমি এর ডিফল্ট সহনশীলতার সাথে চিত্রটির বাইরেরতম প্রান্তে প্রভাবশালী রঙ (উপরে নতুন ফাংশন সহ) পেয়েছি .1
।
border = Flatten[
Join[ImageData[thumb][[1 ;; 34 ;; 33]] ,
Transpose @ ImageData[thumb][[All, 1 ;; 34 ;; 33]]], 1];
background = DominantColorsNew[border][[1]];
শেষ অবধি, আমি পুরো চিত্রটিতে 2 টি প্রভাবশালী রং ফিরিয়েছি, ফাংশনটিকে পাশাপাশি ব্যাকগ্রাউন্ডের রঙটিও ফিল্টার করতে বলেছি।
highlights = DominantColorsNew[Flatten[ImageData[thumb], 1], .1, 2, .2,
List @@ background, .5];
title = highlights[[1]];
songs = highlights[[2]];
উপরের সহনশীলতার মানগুলি নিম্নরূপ: .1
"পৃথক" রঙের মধ্যে ন্যূনতম পার্থক্য; .2
অসংখ্য প্রভাবশালী রঙের মধ্যে ন্যূনতম পার্থক্য (একটি কম মান কালো এবং গা gray় ধূসর রঙ ফিরে আসতে পারে, তবে একটি উচ্চতর মান প্রভাবশালী রঙগুলিতে আরও বৈচিত্র্য নিশ্চিত করে); .5
প্রভাবশালী রঙ এবং পটভূমির মধ্যে ন্যূনতম পার্থক্য (একটি উচ্চতর মান উচ্চতর-বিপরীতে রঙের সংমিশ্রণ উত্পন্ন করবে)
ভাল খবর!
Graphics[{background, Disk[]}]
Graphics[{title, Disk[]}]
Graphics[{songs, Disk[]}]
অ্যালগরিদম খুব সাধারণভাবে প্রয়োগ করা যেতে পারে। আমি উপরের সেটিংস এবং সহনশীলতার মানগুলি সেই স্থানে টিক করেছি যেখানে তারা আমার পরীক্ষিত অ্যালবামের ~ 80% এর জন্য সাধারণত সঠিক রঙ উত্পাদন করতে কাজ করে। DominantColorsNew
হাইলাইটগুলির জন্য ফিরে আসতে দুটি রঙ না পেয়ে যখন কয়েকটি কিনারা ঘটে (যেমন অ্যালবামের কভারটি একরঙা থাকে তখন)। আমার অ্যালগরিদম এই কেসগুলিকে সম্বোধন করে না, তবে আইটিউনসের কার্যকারিতা ডুপ্লিকেট করা তুচ্ছ হবে: অ্যালবামটি যখন কম দুটি হাইলাইট দেয় তখন শিরোনামটি সাদা বা কালো হয়ে যায় ব্যাকগ্রাউন্ডের সাথে সর্বোত্তম বিপরীতে নির্ভর করে। তারপরে গানগুলি একটি হাইলাইট রঙে পরিণত হয় বা শিরোনামের রঙটি কিছুটা ব্যাকগ্রাউন্ডে ম্লান হয়ে যায়।
@ শেঠ-থম্পসনের উত্তর এবং @ ব্লুয়েডোগের মন্তব্যে আমি একটি চিত্রের কার্যকরীতে রঙিন পরিকল্পনা তৈরি করতে কিছুটা অবজেক্টিভ-সি (কোকো-টাচ) প্রকল্প তৈরি করি।
আপনি প্রকল্পটি এখানে পরীক্ষা করতে পারেন:
https://github.com/luisespinoza/LEColorPicker
আপাতত, LEColorPicker করছেন:
এটি এখনই, আমি রঙিন টিউনস প্রকল্পটি ( https://github.com/Dannvix/ColorTunes ) এবং নতুন বৈশিষ্ট্যের জন্য ওয়েড কসগ্রোভ প্রকল্পটি যাচাই করব । এছাড়াও রঙিন স্কিমের ফলাফলের উন্নতি করার জন্য আমার কাছে কিছু নতুন ধারণা রয়েছে।
প্যানিকের ওয়েড কসগ্রোভ তাঁর একটি অ্যালগরিদম বাস্তবায়নের বর্ণনা দিয়ে একটি সুন্দর ব্লগ পোস্ট লিখেছিলেন যা আইটিউনস-এর একটিটিকে প্রায় সমান করে দেয়। এটি উদ্দেশ্য-সি-তে একটি নমুনা বাস্তবায়ন অন্তর্ভুক্ত করে।
আপনি এমএমসিকিউ (মিডিয়ান কাট কালার কোয়ান্টাইজেশন) অ্যালগরিদম ব্যবহার করে এমন আইটিউন অ্যালবাম ভিউর এইচটিএমএল বাস্তবায়ন যা রঙিন টিউনসও চেকআউট করতে পারেন ।
@ শেঠের জবাব দিয়ে আমি পিএইচপি এবং ইমেজিক ব্যবহার করে একটি ছবিতে দুটি পার্শ্বীয় সীমানায় প্রভাবশালী রঙ পেতে আলগোরিদিমটি প্রয়োগ করেছি।
https://gist.github.com/philix/5688064#file-simpleimage-php-L81
এটি http://festea.com.br এ কভার ফটোগুলির পটভূমি পূরণ করতে ব্যবহৃত হচ্ছে used
আমি একই প্রশ্নটি অন্য প্রসঙ্গে জিজ্ঞাসা করেছি এবং একটিটির জন্য http://charlesleifer.com/blog/using-python-and-k-means-to-find-the-dominant-colors-in-images/ এ চিহ্নিত করা হয়েছিল অ্যালগরিদম (কে মিনস) শিখতে যা রাগলি ইমেজটিতে এলোমেলো পয়েন্টগুলি ব্যবহার করে একই কাজ করে। এইভাবে, অ্যালগরিদম নিজে থেকেই প্রভাবশালী রঙগুলি আবিষ্কার করে।