ইমেজগুলি ধুয়ে ফেলুন


15

ভূমিকা

তীব্র প্রান্তগুলি স্পষ্টতই, কেবলমাত্র সরল বিপজ্জনক, সুতরাং কোনও পিএনজিকে ইনপুট হিসাবে দেওয়া হয়, নীচে বর্ণিত পদ্ধতিটি ব্যবহার করে চিত্রটি ঝাপসা করে এবং dam অভিশাপিত তীক্ষ্ণ প্রান্তগুলি ধুয়ে দেয়।

পদ্ধতি

প্রতিটি পিক্সেলের আরজিবি মান পেতে, নিম্নলিখিত তিনটি সমীকরণ ব্যবহার করুন:

আর=1.5×Σএকটি=1এনআরএকটি2এন
জি=1.5×Σএকটি=1এনজিএকটি2এন
বি=1.5×Σএকটি=1এনবিএকটি2এন

যেখানে Σএকটি=1এনআরএকটি2 হল পার্শ্ববর্তী প্রতিটি পিক্সেল বর্গক্ষেত্রের লাল মানগুলির যোগফল। এনএর মানসংলগ্ন পিক্সেলের সংখ্যা (যেমন, একটি কোণার পিক্সেলের একটিএনমান 3 হবে, যখন চিত্রের কেন্দ্রের চারপাশে একটি পিক্সেলের একটিএনমান 8 হবে)।

সংলগ্ন পিক্সেল একটি পিক্সেল যা সমস্ত দিক (বাম, ডান, উপরে, নীচে এবং সমস্ত ত্রিভুজ) এর মূল পিক্সেল থেকে 1 পিক্সেল দূরে।

উদাহরণস্বরূপ, নিম্নলিখিত 3 এক্স 1 চিত্রে:

মাঝের পিক্সেলের অস্পষ্ট আরজিবি মানটি হ'ল:

আর=1.5*(02+ +02)2=0
জি=1.5*(02+ +2552)2=220,836=221
বি=1.5*(2552+ +02)2=220,836=221

যেখানে কোনও দশমিক আউটপুটগুলি নিকটতম ইউনিটে গোল হয়। আপনি কেবল ফলাফল মেঝে করা উচিত নয়।

সুতরাং, মাঝের পিক্সেলটি রঙ হবে (0, 221, 221), বা:

চিত্রটিতে ফলাফল:

চিত্রটিতে প্রতিটি পিক্সেলের জন্য আপনার এই প্রক্রিয়াটি পুনরাবৃত্তি করা উচিত। (নোট করুন যে আপনি এটি মূল পিক্সেল দিয়ে করছেন এবং পরিবর্তিত পিক্সেলগুলি নয় Bas মূলত, আপনার মূল চিত্রটি ওভাররাইট করা উচিত নয় এবং এটি নতুন, অস্পষ্ট চিত্র থেকে সম্পূর্ণ পৃথক রাখা উচিত )।

আপনি যদি 255 এর বেশি মানের মান গণনা করেন তবে ধরে নিন যে এর মান 255 (অর্থাত্ 374 এর মান 255 তে সেট করা হবে)।

ফলস্বরূপ আউটপুটটি পৃথক পিএনজি চিত্র হওয়া উচিত (আপনি যা ইচ্ছা এটির নাম দিতে পারেন)।

উদাহরণ

গেম

মূল:

অস্পষ্ট:

ছক

মূল:

অস্পষ্ট:

Crisps

মূল

অস্পষ্ট

এতটা খাস্তা নয় Not

আমেরিকান গথিক

মূল:

অস্পষ্ট:

বৃহত্তর চিত্রগুলিতে অস্পষ্টতা দেখতে, অস্পষ্ট চিত্রটিতে আবার প্রোগ্রামটি চালানো ভাল:

চ্যালেঞ্জ

প্রদত্ত পিএনজি চিত্রটি ঝাপসা করার জন্য সংক্ষিপ্ততম কোড

আপনি ইমেজ প্রসেসিং লাইব্রেরি (যেমন পিআইএল) ব্যবহার করতে পারেন তবে আপনাকে বিল্ট-ইন ব্লারিং ফাংশনগুলি ব্যবহার করতে হবে না (ম্যাথমেটিকা, আমি আপনাকে দেখছি)।

বিঃদ্রঃ

যেমন @ অরલ્પ নীচে বলেছেন:

রেকর্ডের জন্য, (আমার জ্ঞানের কাছে) এটি কোনও স্ট্যান্ডার্ড ঝাপসা পদ্ধতি নয়। এই চ্যালেঞ্জটি কোনও শিক্ষামূলক সম্পদ নয়।


আমি সেই স্কেলিংয়ে আসলেই খুশি নই। nডিনোমিনেটরে উপস্থিত হওয়া উচিত।
কার্ল ন্যাপ্ফ

আমি "ব্লান্ট" দেখলে খুব আলাদা কিছু ভেবেছিলাম: পি।
আদনান

3
রেকর্ডের জন্য, (আমার জ্ঞানের কাছে) এটি কোনও স্ট্যান্ডার্ড ঝাপসা পদ্ধতি নয়। এই চ্যালেঞ্জটি কোনও শিক্ষামূলক সম্পদ নয়।
অরল্প

যদি আপনার কাছে 8 টি সাদা পিক্সেল (সমস্ত আরজিবি (255,255,255)) দিয়ে ঘেরা একটি সাদা পিক্সেল থাকে তবে অস্পষ্ট পিক্সেলটি rgb (312,312,312) হবে। আমাদের কি কেবল [0,255] রেঞ্জের মধ্যে মানগুলিকে ক্ল্যাম্প করার কথা?
কামোরসো94

1
@ কামোরসো94 ১: হ্যাঁ, অনুমান করুন 255 এর চেয়ে বেশি যে কোনও সংখ্যা 255 2 2: উদাহরণ চিত্রটি 3 x 1 চিত্রের প্রতিনিধিত্ব করে।
বিটা ক্ষয়

উত্তর:


5

পাইথন, 354 313 বাইট

সেরা না, তবে আরে ...

প্রথম স্তরের প্রবেশের জন্য স্পেস, দ্বিতীয় স্তরের জন্য ট্যাব, তারপরে ট্যাব + স্পেস এবং ট্যাব + ট্যাব ব্যবহার করুন

import Image as I
A=I.open(raw_input())
w,h=A.size
B=I.new('RGB',(w,h))
s=[-1,1,0]
r=range
for x in r(w):
 for y in r(h):
    P=[]
    for d in s:
     for e in s:
        try:P+=[A.load()[x+e,y+d]]
        except:0
    P.pop()
    B.load()[x,y]=tuple(min(int(.5+(1.5*sum([v*v for v in t])/len(P))**.5),255)for t in zip(*P))
B.save("b.jpg")
  • সম্পাদনা 1: বিটা ক্ষয়কে ধন্যবাদ math.sqrt()দিয়ে প্রতিস্থাপন করা()**.5
  • এডিট 2: minক্ল্যাম্পিংয়ের জন্য ব্যবহার করে (প্রচুর সাশ্রয়!) এবং লুভজোর 0জন্য passধন্যবাদ
  • সম্পাদনা 3: 5 বাইট সংরক্ষণের +=[]জন্য.append()
  • সম্পাদনা 4: ভেরিয়েবল ব্যবহার করে s স্টেনসিলের জন্য ব্যবহার করে

1
নিশ্চয়ই এর n**0.5চেয়ে খাটো import math;math.sqrt(n)? পরবর্তীকালের কোনও কারণ আছে কি?
বিটা ক্ষয়

হ্যাঁ, এটির কোনও কারণ নেই। আমি শুধু ভুলে গেছি।
কার্ল ন্যাপফ

2
v if v<256 else 255সংক্ষিপ্ত করা যেতে পারেmin(v,255)
লুভজো

আপনি এর passসাথে প্রতিস্থাপন করতে পারেন0
লুভজো

আপনি কোন চিত্র গ্রন্থাগারটি ব্যবহার করছেন তা আপনাকে জানিয়ে দেওয়া দরকার। আপনি যদি পিআইএল / বালিশ ব্যবহার করে থাকেন (এবং এটির মতো দেখতে আপনার মনে হয়) তবে শীর্ষস্থানীয় আমদানি বিবৃতিটি পড়তে হবে from PIL import Image as I
মেগো

0

ম্যাটল্যাব, ১৩০ বাইট

একটি ইনপুট হিসাবে একটি চিত্র নেয় এবং আউটপুট হিসাবে সংরক্ষণ করে b.png

i=double(input(''));m=ones(3);m(5)=0;k=@(x)imfilter(x,m);imwrite(uint8(round((1.5*k(double(i.^2))./k(i(:,:,1)*0+1)).^.5)),'b.png')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.