我必须在Android中的图像上应用球形滤波器,我已经附加了输入和期望的输出图像。输出图像将从输入图像的平方中心区域处理并映射到球体。任何想法如何在Android中做到这一点。我将不得不使用openGL来做到这一点,否则2D转换将会完成这项任务。在android中的球形滤波器
回答
下面的代码Fish Eye lens创建球体并应用一些修改来缩放球体和背景生成,它将主要用于方形图像。
这是一个光线跟踪问题。由于OpenGL不提供基于3D的光线,因此OpenGL很可能不会对您有所帮助。但是,这可能是你正在寻找的。
http://www1.cs.columbia.edu/CAVE/publications/pdfs/Garg_TR04.pdf
我同意添。将一个位图转换为另一个不需要3d点,也不需要Ray-trace,根本就不用它,它只是简单的2D。我不知道opengl是否有内置的东西,但是我有足够的3D经验来指引你正确的方向。你必须遍历你选择的* circle区域内的所有点*这是线索,并使用FISH-EYE变换找到颜色。网上有很多东西。 希望这有助于
该人显示的例子显示了镜面反射,折射以及与水/玻璃等结合的真实圆形。即使您查看Brad Larson提供的链接(按照+1的方式进行链接),边缘在圆形边界处平滑过渡回到图像本身。这是一种效果,而不是这个用户要求的东西。如果上面的图像真的是他们正在寻找的东西,那么它可能会稍微复杂一些,比较简单的着色器类型函数。没有从提问者那里得到很多关于他们的解释的话? – trumpetlicks
我刚刚得到的这个iOS上使用OpenGL ES 2.0工作的落实:
虽然这是iOS上,我使用的片段着色器可以直接跨越到Android提出。中,radius
是归一化的半径 -
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform highp vec2 center;
uniform highp float radius;
uniform highp float aspectRatio;
uniform highp float refractiveIndex;
void main()
{
highp vec2 textureCoordinateToUse = vec2(textureCoordinate.x, (textureCoordinate.y * aspectRatio + 0.5 - 0.5 * aspectRatio));
highp float distanceFromCenter = distance(center, textureCoordinateToUse);
lowp float checkForPresenceWithinSphere = step(distanceFromCenter, radius);
distanceFromCenter = distanceFromCenter/radius;
highp float normalizedDepth = radius * sqrt(1.0 - distanceFromCenter * distanceFromCenter);
highp vec3 sphereNormal = normalize(vec3(textureCoordinateToUse - center, normalizedDepth));
highp vec3 refractedVector = refract(vec3(0.0, 0.0, -1.0), sphereNormal, refractiveIndex);
gl_FragColor = texture2D(inputImageTexture, (refractedVector.xy + 1.0) * 0.5) * checkForPresenceWithinSphere;
}
的center
是归一化坐标为球体的中心(1.0在两个维度从0.0的空间):球面折射部分是使用以下片段着色器来实现,refractiveIndex
是球体的空气/材料指数,aspectRatio
是图像的高宽比(用于确保球体在标准坐标空间中是圆的而不是椭圆的)。
这会计算具有提供的中心和半径的球体的曲面法线,并使用GLSL函数折射传入的矢量并在图像纹理中提供查找坐标。
使用我在this answer中描述的可分离高斯模糊来模糊背景。
此过滤器足够快,可以在iPhone上实时过滤实时视频,因此它应该在大多数Android设备上都能够很好地执行。它的源代码可以在我的开源GPUImage框架中的GPUImageSphereRefractionFilter中找到。
我在openGL中使用了它,它完美地工作。但是我无法理解数学。在计算y textureCoordinateToUse时,我明白为什么aspectRatio会相乘,但为什么需要其余的计算呢? – tanvi
- 1. python中的圆形中值滤波器
- 2. Python中的带通滤波器形状
- 3. 低通滤波器的Android
- 4. OpenCV的形态扩张滤波器作为最大滤波
- 5. 圆形中值滤波器matlab
- 6. 带陷波滤波器和butterworth的滤波器数据
- 7. 如何:Kinetic.js缓存成形滤波器
- 8. 非连接形态滤波器
- 9. matlab中中值滤波器与伪随机滤波器
- 10. C++中的FIR滤波器
- 11. 使用FIR滤波器滤波频谱
- 12. jquery的滤波器
- 13. 内滤波器
- 14. mongocollection滤波器
- 15. Gabor滤波器(小波)
- 16. 在张量流中使用gabor滤波器,或其他任何滤波器而不是默认滤波器
- 17. 不能在表滤波器与输入滤波器分页
- 18. 滤波形式设计
- 19. FIR滤波器设计:如何输入正弦波形
- 20. 你如何计算全球应用滤波器的数量?
- 21. 在Java中的Matlab滤波器
- 22. SonataAdminBundle model_type值滤波形式过滤
- 23. 跳过特定操作过滤器时动作滤波器全球
- 24. 平行中值滤波器
- 25. 滤波器基于在c#
- 26. 滤波器在C#阵列
- 27. Android AudioRecord频率滤波器步骤
- 28. MATLAB上的低通滤波器Butterworth滤波器
- 29. naudio波形适合波形查看器
- 30. 输出滤波器
假如背景只是一个纹理,我认为它不一定是一个困难的光线跟踪问题。您可以将纹理映射到具有某种球面坐标系或立方体贴图的球体上。如果他反映了一个动态的3D场景,我会同意你的看法,但仅仅反映一个纹理并不是太困难。 – Tim
非光线追踪的例子就是我提供的纸是关于(我很确定)!另一种做法(即使背景是纹理)仍然可以使用光线追踪。 – trumpetlicks
“OpenGL不提供基于射线的3D” - 使用着色器时绝对可以。我使用OpenGL ES 2.0着色器完成了接近此的变形:http://stackoverflow.com/a/9896856/19679 GLSL甚至为通过对象的光线折射定义了一个'refract()'函数。让我看看是否可以创建着色器来复制此特定效果。 –