প্রায় সমস্ত ডিজিটাল ক্যামেরা সেন্সর ফটোসেন্সারগুলির একটি গ্রিডে সংগঠিত। প্রতিটি ফটো সেন্সর প্রাথমিক রঙগুলির মধ্যে একটির জন্য সংবেদনশীল : লাল, সবুজ এবং নীল। Photo ফটো সেন্সরগুলি যেভাবে সংগঠিত করা হয়েছে তাকে ইস্টম্যান কোডকের উদ্ভাবক ব্রায়স বায়ারের পরে বায়ার ফিল্টার বলে । কোনও ছবি তোলার পরে, চারটি ফটো সেন্সর ফলাফল ইমেজে একটি পিক্সেলের আরজিবি মান রচনা করে। আপনার কাজটি সেই প্রক্রিয়াটিকে বিপরীত করা এবং ফলাফলগুলির পিক্সেলগুলি তাদের ফিল্টার রঙ অনুযায়ী রঙিন করা। সরলতার জন্য, আমরা গামা সংশোধন উপেক্ষা করব ।
উদাহরণস্বরূপ: "সাধারণ" ফরোয়ার্ড বায়ার ফিল্টার পদক্ষেপগুলি হ'ল:
- প্যান্টোন বিসভ্যাক্স রঙের সাথে একটি লাইট্রে সেন্সরে আঘাত করে;
- বিজিজিআর (নীল - সবুজ / সবুজ - লাল) ফিল্টার এটিকে চারটি রশিতে বিভক্ত করে।
- চারটি রশ্মি সেন্সরে আঘাত করেছিল, যা পড়ে: 81 - 168/168 - 235 (সেন্সরের মান 0 - 255 থেকে শুরু করে);
- বায়ার ফিল্টার এটিকে রঙের (235, 168, 81) সাথে একটি আরজিবি পিক্সেলে অনুবাদ করে।
বিপরীত বাইয়ার ফিল্টার পদক্ষেপগুলি হ'ল:
- রঙের সাথে আরজিবি পিক্সেল (235, 168, 81) আরজিবি মান সহ চার পিক্সেলে বিভক্ত: (0,0,81) - (0,168,0) / (0,168,0) - (235,0,0)।
চ্যালেঞ্জ
আপনার স্বল্পতম সম্ভাব্য ফাংশন বা প্রোগ্রামটি লিখুন যা নিম্নলিখিতগুলি করে:
- ইনপুট হিসাবে একটি ফাইল নাম নিন এবং ডিবেয়ার্ড চিত্রটি আউটপুট করুন।
- আউটপুট কোনও ফাইলে লেখা বা স্ক্রিনে প্রদর্শিত হতে পারে।
- আউটপুট অবশ্যই মূল চিত্রের প্রস্থের দ্বিগুণ এবং দ্বিগুণ হতে হবে।
ইনপুট চিত্রের প্রতিটি পিক্সেল অবশ্যই বিজিজিআর (নীলা - সবুজ / সবুজ - লাল) বায়ার ফিল্টার প্যাটার্ন অনুসারে ম্যাপ করা আবশ্যক নিম্নলিখিত চিত্রটিতে গ্রাফিকভাবে বর্ণিত:
আমরা ধরে নেব যে উভয় সবুজ ফটোসেন্সরই একই সংকেত পেয়েছে, তাই বায়ার ম্যাট্রিক্সের দুটি মানই আরজিবি চিত্রের জি মানের সমান।
- আপনি পারে না ফলে ইমেজ একটি অ্যারের প্রতিনিধিত্ব ফিরে যান। আউটপুট অবশ্যই একটি চিত্র বা একটি ফাইল ( কোনও উপযুক্ত চিত্র বিন্যাসে ) থাকতে হবে যা চিত্র হিসাবে প্রদর্শিত হতে পারে।
উদাহরণ
একটি ইনপুট হিসাবে এই ফাইল দেওয়া:
ফলস্বরূপ চিত্রটি হওয়া উচিত:
রেফারেন্স অজগর বাস্তবায়ন:
from PIL import Image
import numpy
import sys
if len(sys.argv) == 1:
print "Usage: python DeByer.py <<image_filename>>"
sys.exit()
# Open image and put it in a numpy array
srcArray = numpy.array(Image.open(sys.argv[1]), dtype=numpy.uint8)
w, h, _ = srcArray.shape
# Create target array, twice the size of the original image
resArray = numpy.zeros((2*w, 2*h, 3), dtype=numpy.uint8)
# Map the RGB values in the original picture according to the BGGR pattern#
# Blue
resArray[::2, ::2, 2] = srcArray[:, :, 2]
# Green (top row of the Bayer matrix)
resArray[1::2, ::2, 1] = srcArray[:, :, 1]
# Green (bottom row of the Bayer matrix)
resArray[::2, 1::2, 1] = srcArray[:, :, 1]
# Red
resArray[1::2, 1::2, 0] = srcArray[:, :, 0]
# Save the imgage
Image.fromarray(resArray, "RGB").save("output.png")
মনে রাখবেন: এটি একটি কোড-গলফ, তাই সংক্ষিপ্ততম কোড জয়!
BG
উপরের সারি এবং GR
নীচে একটি ঘর দেখায়, উদাহরণস্বরূপ চিত্রটি RG
উপরে এবং GB
নীচে প্রদর্শিত হয়। এর অর্থ কি এমন কোনও ব্যবস্থা যা দুটি সবুজ কোষকে একটি তির্যকটিতে রাখে তা গ্রহণযোগ্য? (অন্যগুলি জিবি / আরজি এবং জিআর / বিজি হবে))