বিটম্যাপ আলফা বেভেল অ্যালগরিদম?


14

আমি একটি অ্যালগরিদম তৈরি করতে চাইছি যা এটি আল্পারটিকে মুরগির মানচিত্র হিসাবে ব্যবহার করে বিটম্যাপে একটি বেভেল এফেক্ট যুক্ত করে।

আমি এইভাবে কিছু করতে যাব? আমি স্পষ্টুলার লাইটিংয়ের চেষ্টা করেছি তবে আমি কেবল হাইলাইট পাই এবং শেডটিও পাই না।

এখানে আমি যে প্রভাবটির কথা বলছি তা এখানে রয়েছে (ফটোশপ ব্যবহার করে তৈরি): এখানে চিত্র বর্ণনা লিখুন

এগুলি সবই ব্যবহার করে করা হয়েছিল size: 30px(বিটম্যাপের কনট্যুর থেকে বেভেলের গভীরতা) angle 130,, altitude 50

বাম থেকে ডানে, উপরে থেকে নীচে:

  1. চিসেল হার্ড বেলভ
  2. চিসেল নরম বেভেল
  3. স্মুথ বেভেল
  4. সঙ্গে বাটালি হার্ড soften: 16pxএকটি ঝাপসা বেভেল -

আমি এই প্রভাবগুলির প্রতিটি তৈরি করার চেষ্টা করছি, আমি কীভাবে বেসিক বেলভ তৈরি করব? এবং এই বেভিল থেকে আমার প্রতিটিটিতে কী দরকার?

উত্তর:


10

এটি দূরত্বের রূপান্তরকে বোঝার মাধ্যমে সম্পন্ন করা যেতে পারে।

মুখোশের প্রান্তে দূরত্বের রূপান্তর ব্যবহার করুন। তারপরে এই দূরত্বটির প্রসারকে কিছু দূরত্বের অতিক্রম করে মানগুলি সরাতে রূপান্তর করুন। আমি মনে করি শেডিংয়ের গোপনীয়তা হ'ল দূরত্ব রূপান্তরের ফলাফলটিকে কার্নেলের সাথে রূপান্তর করা যা এরকম কিছু দেখায়:

[ -1.0  -1.0  -1.0
  -1.0   0.0   0.0
  -1.0   0.0   1.0 ]

এটি আপনাকে সঠিক দিকে শুরু করা উচিত:

#include "opencv/cv.h"
#include "opencv/highgui.h"

using namespace cv;
using namespace std;

int main() {
    Mat mask, dist, bevel;
    mask = Mat::zeros(200, 400, CV_8U);
    rectangle(mask, Point(30,30), Point(180,180), Scalar(255), -1);
    circle(mask, Point(30,30), 50, Scalar(0), -1);
    circle(mask, Point(180,180), 50, Scalar(0), -1);
    circle(mask, Point(300,100), 75, Scalar(255), -1);
    imshow("1",mask);

এখানে চিত্র বর্ণনা লিখুন

    //find edges and invert image for distance transform
    Canny(mask, dist, 50, 150);
    dist = 255-dist;
    distanceTransform(dist, dist, CV_DIST_L2, CV_DIST_MASK_5);
    threshold(dist, dist, 20, 20, CV_THRESH_TRUNC);
    blur(dist, dist, Size(3,3));
    dist.convertTo(bevel, CV_8U);
    equalizeHist(bevel, bevel);
    imshow("2",bevel);

এখানে চিত্র বর্ণনা লিখুন

    //convolve with secret sauce
    float d[] = {-1,-2,-3,
                 -2, 0, 0,
                 -3, 0, 1 };
    Mat kernel(3, 3, CV_32F, d);
    kernel = kernel - mean(kernel)[0];
    filter2D(dist, dist, CV_32F, kernel);

    //normalize filtering result to [-1, 1]
    double maxVal;
    minMaxLoc(dist, NULL, &maxVal);
    dist = 128 * dist / maxVal;

    //convert and display result
    dist.convertTo(bevel, CV_8U, 1, 128);
    bevel = bevel.mul(mask)/255;
    imshow("3", bevel);

এখানে চিত্র বর্ণনা লিখুন

    waitKey(0);
}

যারা দুর্দান্ত দেখায়! সফটওয়্যারটি দেখতে ঝাপসা লাগছে তবে আমি কীভাবে এগুলি থেকে তাদের "স্মুথ বেভেল" বানাতে যাব?
শেদোকন

আমি বিশ্বাস করি স্মুথ বেভেল কনভলিউশনের আগে দূরত্বের মুখোশটি ঝাপসা করে এবং কনফিউজেন্সের পরে সফ্টেন ফলটিকে ঝাপসা করে।
ম্যাট এম।

4

ফটোশপের বেভেল এবং এম্বোস ভবিষ্যদ্বাণী করে:

1) অস্থায়ী 8-বিট একক চ্যানেল চিত্রটিতে দূরত্বের রূপান্তর গণনা করুন

  • চিসেল একটি চাম্পার মেট্রিক (3x3, 5x5, বা 7x7 আকারের উপর নির্ভর করে) এর সাথে ইউক্লিডিয়ান দূরত্ব ট্রান্সফর্ম ব্যবহার করে। আপনি যদি চান তবে আপনি সঠিক ইউক্যালিডিয়ান দূরত্বের রূপান্তর ব্যবহার করতে পারেন, আমি মাইজস্টারের কাছ থেকে এটি পছন্দ করি যেহেতু এটি অ্যান্টি-এলিয়াসড করা যায় ("লিনিয়ার টাইমে কম্পিউটারের দূরত্বের রূপান্তরকরণের জন্য একটি সাধারণ অ্যালগরিদম", এমইজিএসটিআর)।

  • স্মুথ বেভেল একটি চাম্পার 5-7-11-10 দূরত্বে রূপান্তরটি বাক্সের দু'টি অ্যাপ্লিকেশন অনুসরণ করে ব্লামের মানচিত্র তৈরি করে ur

2) মধ্যবর্তী দূরত্ব ট্রান্সফর্ম ইমেজে বাম্প ম্যাপিং প্রয়োগ করুন। ব্লিনের মূল কৌশলটি উপযুক্ত।

3) নরম করার জন্য আপনি পৃষ্ঠের নরমালগুলির উপর একটি সমাবর্তন সম্পাদন করতে পারেন বা আপনি কার্নেল ব্যবহার করে এগুলি ফিল্টার করতে পারেন।

৪) দ্বন্দ্বের মানচিত্র ব্যবহার করে পৃষ্ঠের নরমালগুলি বৈশ্বিক আলোক উত্সের সাথে মিলিত হয় -1 থেকে 1 পর্যন্ত একটি মান হিসাবে আলোকের তীব্রতা গণনা করার জন্য যেখানে নেতিবাচক মানগুলি ছায়া, ধনাত্মক মান হাইলাইট হয় এবং পরম মান আলোর দৈর্ঘ্য হয় সূত্র.

5) দুটি 8-বিট একক চ্যানেল অস্থায়ী চিত্র গণনা করা হয়, একটি হাইলাইটের তীব্রতা থেকে এবং অন্যটি ছায়া থেকে। সেখান থেকে প্রতিটি রঙিন, মিশ্রণ মোড এবং অস্বচ্ছতা ব্যবহার করে স্তরটি রঙ করার জন্য প্রতিটি মুখোশ ব্যবহার করা তুচ্ছ - এটি হাইলাইটগুলির জন্য একটি মুখোশ এবং অন্যটি ছায়ার জন্য।

এর কিছু বাস্তবায়নের জন্য ভিজ্যুয়াল বেসিক সোর্স কোডটি এখানে পাওয়া যাবে:

http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=51640&lngWId=1

আরও জানার জন্য দয়া করে আমার ওপেন সোর্স লেয়ারএফেক্টস প্রকল্পটি দেখুন:

https://github.com/vinniefalco/LayerEffects.git

আমি আশা করি এটা কারো সাহায্যে লাগবে.


আপনাকে ধন্যবাদ, আপনি উল্লিখিত গাউসীয় দূরত্ব রূপান্তরের প্রতি আমি খুব আগ্রহী, আপনি কোনও কোড উপলব্ধ সম্পর্কে অবগত আছেন? আমি সূত্রগুলি ভাল করে পড়তে পারছি না। :(
শেদোকন

আমি ইতিমধ্যে পোস্ট করা তথ্য ব্যতীত জিডিটি সম্পর্কে কিছুই পাই না।
ভিনি ফ্যালকো

"2) দূরত্ব রূপান্তরিত চিত্রের জন্য বাম্প ম্যাপিং প্রয়োগ করুন" এর অর্থ কী? দূরত্ব রূপান্তর দূরত্ব দেয় (প্রতিটি পিক্সেলের জন্য 1 নম্বর), যখন বাম্প ম্যাপিংয়ের জন্য স্বাভাবিক (প্রতিটি পিক্সেলের জন্য 2 নম্বর) প্রয়োজন হয় ... আপনি কি নিশ্চিত যে আপনি কী বলছেন তা জানেন?
ইভান ককির

@ ইভানক্কির আমার আরও স্পষ্ট হওয়া উচিত ছিল - দূরত্বের রূপান্তরকে উচ্চতার মানচিত্র হিসাবে বিবেচনা করে এবং প্রতিবেশী উল্লম্ব এবং অনুভূমিক মানের থেকে dx / dy গণনা করে কোনও পৃষ্ঠের সাধারণ গণনা করা যেতে পারে। এই দুটি নম্বর দ্বিধা ম্যাপিংয়ের জন্য প্রয়োজনীয় প্রয়োজনীয় সরবরাহ করে।
ভিনি ফ্যালকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.