ফোটোমোজেইক হলো একটি টেকনিক, যেখানে আমরা আমাদের ইমেজকে স্কয়ারের একটি গ্রিডে ভাগ করতে পারি। প্রতিটি স্কয়ারকে অন্য কিছু ইমেজ বা কালার দিয়ে রিপ্লেস করা হয়। তাই যখন আমরা একচুটি দূর থেকে একচুটি ইমেজ দেখতে চাই, আমরা একচুটি ইমেজ দেখতে পাই, কিন্তু যদি আমরা কাছে আসি, আমরা ভিন্ন রঙের ব্লকের একটি গ্রিড দেখতে পাই।
এই কেসে আমরা photomosaic নামে একটি পাইথন মডিউল ব্যবহার করছি। এই মডিউল ব্যবহার করে আমরা সহজে কিছু ফোটোমোজেইক তৈরি করতে পারি। ইনস্টল করতে এই লিংক ফলো করুন। এটি scikit learn মডিউলও ডাউনলোড করবে।
sudo pip3 install photomosaic
এই মডিউলের কিছু ফিচার রয়েছে। নিচে লিস্ট করা হলো:
- এখানে আমরা টাইলের বিভিন্ন সাইজ ব্যবহার করতে পারি।
- ইমেজের ডিটেইলড অংশের জন্য ছোট টাইল সেট করতে পারি।
- ফ্লিকার API ব্যবহার করে টাইল হিসেবে ব্যবহার করার জন্য বড় ইমেজ কালেকশন পেতে পারি।
এই আর্টিকেলে, আমরা দেখব কীভাবে এই মডিউলটি ফোটোমোজেইকে জন্য খুব সহজে ইমপ্লিমেন্ট করা যায়।
আমরা skimage লাইব্রেরি থেকে একটি ইমেজ ব্যবহার করছি।
মেইন ইমেজ

ফোটোমোজেইক তৈরির ধাপসমূহ
- একচুটি ইমেজ নিন (এখানে skimage লাইব্রেরি থেকে ইমেজ)
- গ্রিড টাইল সাইজ ডিফাইন করুন
- রঙিন RGB ইমেজ ব্লক তৈরি করার জন্য একটি লোকেশন দিন পুল হিসেবে
- ফোল্ডারটিকে ফোটোমোজেইকের জন্য পুল হিসেবে সেট করুন
- পুল এবং গ্রিড সাইজ ব্যবহার করে ফোটোমোজেইকে রূপান্তর করুন
- ইমেজ সংরক্ষণ করুন
- এক্সিট
উদাহরণ কোড
from skimage.io import *
import sys
import photomosaic as phmos
from skimage import data
image = data.coffee() # skimage থেকে কফি ইমেজ পান
# কমান্ড লাইন আর্গুমেন্ট থেকে মোজেইক সাইজ পান
mos_size = (int(sys.argv[1]), int(sys.argv[2]))
# সব ইমেজ স্কয়ার তৈরি করুন এবং পুল জেনারেট করুন
phmos.rainbow_of_squares('square/')
square_pool = phmos.make_pool('square/*.png')
# মোজেইক ইমেজ তৈরি করুন এবং সংরক্ষণ করুন
mosaic = phmos.basic_mosaic(image, square_pool, mos_size)
imsave('mosaic_op.png', mosaic)
আউটপুট (প্রথম রান, গ্রিড সাইজ 100 x 100)
$ python3 225.Photomosaic.py 100 100
5832it [00:02, 2506.05it/s]
analyzing pool: 100%|| 5832/5832 [00:08<00:00, 717.90it/s]
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.
warn("The default mode, 'constant', will be changed to 'reflect' in ")
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.
warn("Anti-aliasing will be enabled by default in skimage 0.15 to ")
partitioning: depth 0: 100%|| 10000/10000 [00:00<00:00, 852292.94it/s]
analyzing tiles: 100%|| 10000/10000 [00:00<00:00, 93084.50it/s]
matching: 100%|| 10000/10000 [00:00<00:00, 30864.50it/s]
drawing mosaic: 100%|| 10000/10000 [00:00<00:00, 13227.12it/s]
/usr/local/lib/python3.6/dist-packages/skimage/util/dtype.py:141: UserWarning: Possible precision loss when converting from float64 to uint8 .format(dtypeobj_in, dtypeobj_out))

আউটপুট (দ্বিতীয় রান, গ্রিড সাইজ 500 x 500)
$ python3 225.Photomosaic.py 500 500
5832it [00:02, 2634.16it/s]
analyzing pool: 100%|| 5832/5832 [00:08<00:00, 709.54it/s]
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.
warn("The default mode, 'constant', will be changed to 'reflect' in ")
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.
warn("Anti-aliasing will be enabled by default in skimage 0.15 to ")
partitioning: depth 0: 100%|| 250000/250000 [00:00<00:00, 456159.45it/s]
analyzing tiles: 100%|| 250000/250000 [00:02<00:00, 113937.01it/s]
matching: 100%|| 250000/250000 [00:07<00:00, 32591.43it/s]
drawing mosaic: 100%|| 250000/250000 [00:02<00:00, 104349.90it/s]
/usr/local/lib/python3.6/dist-packages/skimage/util/dtype.py:141: UserWarning: Possible precision loss when converting from float64 to uint8 .format(dtypeobj_in, dtypeobj_out))
