इस विषय के संबंध में मैंने GLSL में Sobel Edge Detection फ़िल्टर को सफलतापूर्वक लागू किया है । यहाँ फिल्टर के टुकड़े shader कोड है:
#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);
}
और यहां सोबेल एज डिटेक्शन के साथ क्यूब का परिणाम है:
यदि आप चित्र को बड़ा करते हैं, तो आप देखेंगे कि सोबेल द्वारा निर्मित "शोर" का एक बहुत कुछ है: नीले / सफेद ढाल के कारण दृश्य भर में ग्रे क्षैतिज पट्टियाँ हैं। फ़ुथर्मोर, प्रकाश शंकु घन पर एक अवांछित पैटर्न का उत्पादन करते हैं। क्यूब के बाईं ओर के काले किनारे भी घन के आधे भाग पर प्रकाश शंकु के कारण फीके लगते हैं।
इसलिए मैंने इस लेख को पढ़ा जिसमें कहा गया था कि किसी को पहले चित्र को स्केल करना चाहिए और किनारों को स्पष्ट करने के लिए गॉसियन ब्लर फ़िल्टर का उपयोग करना चाहिए। लेख के निचले भाग में, कैनी एज डिटेक्शन फ़िल्टर भी है जो बेहतर परिणाम देता है।
अब मेरे दो सवाल हैं:
निम्न संभव चरणों का पता लगाने के लिए सबसे अच्छा संभव बढ़त का पता लगाने के परिणाम सही हैं:
- ग्रेस्केल
- गौस्सियन धुंधलापन
- सोबेल / कैनी बढ़त का पता लगाने
यदि हाँ, तो मैं संसाधित छवि के साथ मूल छवि को कैसे मर्ज करूँगा? मेरा मतलब है, ऊपर बताए गए चरणों को संसाधित करने के बाद, मुझे एक छवि मिलती है जो या तो पूरी तरह से सफेद किनारों के साथ काली होती है या इसके विपरीत। मैं किनारों को अपनी मूल छवि / बनावट पर कैसे रखूंगा?
आपकी सहायताके लिए धन्यवाद!