এই বিষয়ে সম্মানের সাথে আমি সাফল্যের সাথে জিএলএসএলে সোবেল এজ সনাক্তকরণ ফিল্টারটি প্রয়োগ করেছি । ফিল্টারটির টুকরোটি শেডার কোডটি এখানে:
#version 330 core
in vec2 TexCoords;
out vec4 color;
uniform sampler2D screenTexture;
mat3 sx = mat3(
1.0, 2.0, 1.0,
0.0, 0.0, 0.0,
-1.0, -2.0, -1.0
);
mat3 sy = mat3(
1.0, 0.0, -1.0,
2.0, 0.0, -2.0,
1.0, 0.0, -1.0
);
void main()
{
vec3 diffuse = texture(screenTexture, TexCoords.st).rgb;
mat3 I;
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
vec3 sample = texelFetch(screenTexture, ivec2(gl_FragCoord) + ivec2(i-1,j-1), 0 ).rgb;
I[i][j] = length(sample);
}
}
float gx = dot(sx[0], I[0]) + dot(sx[1], I[1]) + dot(sx[2], I[2]);
float gy = dot(sy[0], I[0]) + dot(sy[1], I[1]) + dot(sy[2], I[2]);
float g = sqrt(pow(gx, 2.0)+pow(gy, 2.0));
color = vec4(diffuse - vec3(g), 1.0);
}
এবং এখানে সোবেল প্রান্ত সনাক্তকরণ সহ একটি কিউবের ফলাফল:
আপনি যদি ছবিটি প্রসারিত করেন তবে দেখতে পাবেন যে সোবেল দ্বারা উত্পাদিত প্রচুর "শব্দ" রয়েছে: নীল / সাদা গ্রেডিয়েন্টের কারণে পুরো দৃশ্যে ধূসর অনুভূমিক স্ট্রাইপ রয়েছে। ফুটারমোর, হালকা শঙ্কুগুলি কিউবে একটি অযাচিত প্যাটার্ন উত্পাদন করে। কিউবের বাম দিকে কালো প্রান্তগুলিও কিউবের বাম অর্ধেকের হালকা শঙ্কুর কারণে বিবর্ণ হয়ে গেছে বলে মনে হচ্ছে।
সুতরাং আমি এই নিবন্ধটি পড়েছিলাম যা বলেছিল যে ছবিটি প্রথমে গ্রেস্কেল করা উচিত এবং প্রান্তগুলি আরও সুস্পষ্ট করার জন্য গাউসিয়ান ব্লার ফিল্টার ব্যবহার করা উচিত। নিবন্ধের নীচে, ক্যানি প্রান্ত সনাক্তকরণ ফিল্টারটি রয়েছে যা আরও ভাল ফলাফল দেয় বলে মনে হয়।
এখন আমার দুটি প্রশ্ন আছে:
সর্বোত্তম সম্ভাব্য প্রান্ত সনাক্তকরণ ফলাফল উত্পাদন করতে নিম্নলিখিত পদক্ষেপগুলি কি সঠিক:
- গ্রেস্কেল
- গাউসিয়ান ব্লার
- সোবেল / ক্যানি প্রান্ত সনাক্তকরণ
যদি হ্যাঁ, আমি কীভাবে প্রক্রিয়াজাত চিত্রটির সাথে মূল চিত্রটি একীভূত করব? আমি বোঝাতে চাইছি, উপরে বর্ণিত পদক্ষেপগুলি প্রক্রিয়া করার পরে, আমি একটি চিত্র পেয়েছি যা হয় সাদা প্রান্ত বা ভাইস ভারকা সহ পুরোপুরি কালো। আমি কীভাবে আমার মূল চিত্র / জমিনে প্রান্ত স্থাপন করব?
আপনার সাহায্যের জন্য ধন্যবাদ!