কোনও চিত্রের বিপরীত ফিল্টার


9

প্রায় সমস্ত ডিজিটাল ক্যামেরা সেন্সর ফটোসেন্সারগুলির একটি গ্রিডে সংগঠিত। প্রতিটি ফটো সেন্সর প্রাথমিক রঙগুলির মধ্যে একটির জন্য সংবেদনশীল : লাল, সবুজ এবং নীল। 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")

মনে রাখবেন: এটি একটি , তাই সংক্ষিপ্ততম কোড জয়!


5
আমি যখন স্ক্রোল করেছিলাম তখন প্রায়
আস্তে আস্তে এসে পড়েছিল

1
@ ফ্যাটালাইজ এর জন্য দুঃখিত! ;-) অদ্ভুত প্রভাব, তাই না?
agtoever

নির্দেশাবলী BGউপরের সারি এবং GRনীচে একটি ঘর দেখায়, উদাহরণস্বরূপ চিত্রটি RGউপরে এবং GBনীচে প্রদর্শিত হয়। এর অর্থ কি এমন কোনও ব্যবস্থা যা দুটি সবুজ কোষকে একটি তির্যকটিতে রাখে তা গ্রহণযোগ্য? (অন্যগুলি জিবি / আরজি এবং জিআর / বিজি হবে))
স্তর

@ লেভেলভিভারস্টের আমার উদ্দেশ্য ছিল বিজিজিআর (চতুর্থ চ্যালেঞ্জ বুলেটে উল্লিখিত) অনুসরণ করা। আমার ভুল যদি আসল উদাহরণ চিত্রটি আরজিবিতে থাকে। আমি আমার ল্যাপটপে আসামাত্রই এটি সংশোধন করব।
agtoever

আমি মনে করি না যে আপনার উদাহরণের চিত্রটি সঠিক, এটির জন্য একেবারে একটি অদ্ভুত নীল রঙ রয়েছে
orlp

উত্তর:


6

পাইথ, 26 বাইট

MXm03H@GH.wsMsgLRRR,U2tU3'

স্টিডিনে উদ্ধৃতি চিহ্ন সহ ইনপুট ফাইলের নাম প্রত্যাশা করে এবং এতে লিখেছে o.png। উদাহরণ আউটপুট:


আপনি উত্তর এখন পর্যন্ত সংক্ষিপ্ততম। আমি এটি গ্রহণ করার প্রবণতা রাখি, তবে আপনি যদি আপনার প্রোগ্রামটি কীভাবে কাজ করে সে সম্পর্কে কোনও ব্যাখ্যা যোগ করতে পারলে ভাল লাগবে।
'15

আমি পূর্ববর্তী প্রশ্নের উত্তরটি ব্যবহার করে ক্রোনেক্কার পণ্যটি সবেমাত্র ব্যবহার করেছি: কোডগলফ.স্ট্যাকেক্সচেঞ্জ / প্রশ্নগুলি / 7978৮৯7/২
orlp

6

মতলব, 104 92 বাইট

এটি মাতলাবে আরজিবি চিত্রগুলির 3 ডি-অ্যারে / ম্যাট্রিক্স উপস্থাপনা এবং ক্রোনেকার পণ্য ব্যবহার করে যা আমাদের নতুন উত্স 2x2 "মেটাপিক্সেল" প্রতিটি উত্স পিক্সেল তৈরির প্রয়োজন। আউটপুট তারপরে একটি পপআপ উইন্ডোতে প্রদর্শিত হয়।

a=double(imread(input('')));for n=1:3;b(:,:,n)=kron(a(:,:,n),[1:2;2:3]==n)/255;end;imshow(b)

পুনরায় আকার দেওয়া স্ক্রিনক্যাপচার:


এটাই [1:2;2:3]==nচালাক! আপনি কি সরাতে পারবেন না b=[a,a;a,a];?
লুইস মেন্ডো

@ লুইস মেন্ডো ধন্যবাদ =) এটি সত্যিই কাজ করে, আমি এটি আশা করি না!
flawr

5

পাইথন 3, 259 254 বাইট

from PIL.Image import*
o=open(input())
w,h=o.size
n=new('RGB',(2*w,2*h))
P=Image.putpixel
for b in range(w*h):x=b//h;y=b%h;r,g,b=o.getpixel((x,y));c=2*x;d=2*y;G=0,g,0;P(n,(c,d),(0,0,b));P(n,(c+1,d),G);P(n,(c,d+1),G);P(n,(c+1,d+1),(r,0,0))
n.save('o.png')

ইনপুট ফাইলের নামটি স্ট্যান্ডার্ড ইনপুটটিতে দেওয়া হয়। আউটপুট o.png

ব্যবহারের উদাহরণ:

$ echo mona-lisa.jpg | python bayer.py

বিপরীত বায়ার ফিল্টার সহ মোনা লিসা প্রয়োগ করা হয়েছে


2
পিপিসিজিতে স্বাগতম, প্রথম প্রথম উত্তর!
লিকি নুন

4

গণিত 118 127 বাইট

মূল জমাটি ইনপুট হিসাবে একটি আসল চিত্র ব্যবহার করে। এটি পরিবর্তে একটি ফাইলের নাম ব্যবহার করে।

এটি রেফারেন্সযুক্ত ফাইলের চিত্রের ডেটাতে দুটি প্রতিস্থাপনের নিয়ম প্রয়োগ করে:

  1. চিত্রের ডেটা ম্যাট্রিক্সের প্রতিটি সারিটির জন্য, প্রতিটি পিক্সেল {r, b, g a একটি নীল পিক্সেল, {0,0, b replace এর পরে সবুজ পিক্সেল, {0, g, 0 replace প্রতিস্থাপন করুন;
  2. পৃথকভাবে, চিত্রের ডাটা ম্যাট্রিক্সের প্রতিটি সারিটির জন্য, প্রতিটি পিক্সেল {r, b, g} এর সাথে সবুজ পিক্সেল {0, g, 0} এর পরে একটি লাল পিক্সেল, {r, 0,0} প্রতিস্থাপন করুন;

তারপরে Riffle(অর্থাত্ ইন্টারলিভ) 1 এবং 2 এর ফলাফল ম্যাট্রিক।

Image[Riffle[#/.{{_,g_,b_}:>(s=Sequence)[{0,0,b},{0,g,0}]}&/@(m=Import[#,"Data"]/255),#/.{{r_,g_,_}:>s[{0,g,0},{r,0,0}]}&/@m]]&

Image[Riffle[#/.{{_,g_,b_}:>(s=Sequence)[{0,0,b},{0,g,0}]}&/@(m=Import[#,"Data"]/255),#/.{{r_,g_,_}:>s[{0,g,0},{r,0,0}]}&/@m]]&["mona.jpg"]

বিপরীত বায়ার


নিশ্চিত নন, কিন্তু এই সন্তুষ্ট "বলে মনে হচ্ছে না ইনপুট হিসেবে একটি ফাইল নিন "
agtoever

এখনও, এটি এখন একটি চিত্রের পরিবর্তে ফাইলের নাম হিসাবে ইনপুট হিসাবে ব্যবহার করে।
ডেভিডসি

3

জে, 100 96 90 বাইট

load'bmp'
'o'writebmp~,./,./($a)$2 1 1 0(_2]\(2^0 8 8 16)*{)"1(3#256)#:,a=:readbmp]stdin''

এটি জে এর একটি স্ক্রিপ্ট যা স্টিডিন থেকে ইনপুট চিত্রের ফাইলের নামটি পড়ে এবং ফলস্বরূপ একটি ফাইলকে আউটপুট করে o। ইনপুট এবং আউটপুট চিত্র উভয়ই থাকবেbmp ফর্ম্যাটে থাকবে। এটি কেবল ফাইলের নামটিও ইনপুট হিসাবে প্রত্যাশা করে, এর অর্থ হ'ল নেতৃস্থানীয় এবং চলমান সাদা স্থান উপস্থিত হওয়া উচিত নয়।

নমুনা ব্যবহার

$ echo -n mona.bmp | jconsole reversebayer.ijs

নমুনা

ব্যাখ্যা

A=:readbmp]stdin''  Store the image in A as a 2d array of 24-bit rgb ints
,                   Flatten it into a list
(3#256) #:          Convert each 24-bit int to a tuple of 8-bit r/g/b ints
2 1 1 0 {"1         Select each column in BGGR order
(2^0 8 8 16) *      Shift each color to make it a 24-bit rgb value
_2 ]\               Convert each row from dimensions 1x4 to 2x2
($A) $              Reshape the list of 2x2 matrices into a matrix of
                    2x2 matrices with dimensions matching A
,./                 Append the 2x2 matrices by column
,./                 Append the 2x2 matrices by row - This is now a matrix of
                     24-bit rgb values with twice the dimensions of A
'o'writebmp~        Write the image array to a bmp file named 'o'

0

পাইথন 2, 256 275 বাইট

প্রথমে আমি মূল কোডটি সরলীকৃত করেছি:

from PIL import Image
from numpy import*
import sys

# Open image and put it in a numpy array
srcArray = array(Image.open(sys.argv[1]), dtype=uint8)
w, h, _ = srcArray.shape

# Create target array, twice the size of the original image
resArray = zeros((2*w, 2*h, 3), dtype=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("o.png")

তারপরে এটিকে ছোট করুন:

from PIL import Image
from numpy import*
import sys
a=array(Image.open(sys.argv[1]),dtype=uint8)
w,h,_=a.shape
b=zeros((2*w,2*h,3),dtype=uint8)
b[::2,::2,2]=a[:,:,2]
b[1::2,::2,1]=a[:,:,1]
b[::2,1::2,1]=a[:,:,1]
b[1::2,1::2,0]=a[:,:,0]
Image.fromarray(b,"RGB").save("o.png")

চিত্রটিতে ফলাফল o.png:

o.png প্রক্রিয়া করার পরে চিত্র

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.