社区
机器视觉
帖子详情
双三次插值平滑算法??
e_feeling
2002-11-18 03:25:54
谁知道双三次插值平滑算法?请赐教!
...全文
1408
7
打赏
收藏
双三次插值平滑算法??
谁知道双三次插值平滑算法?请赐教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
e_feeling
2002-12-04
打赏
举报
回复
《图像处理(下)计算机视觉》
这本书那里有?转化为矢量处理比较慢.我想直接处理.
XCOOL
2002-11-25
打赏
举报
回复
用抖动的方法和半像术法都可以消除锯齿,要不你可以先把点阵字体转化成为矢量字这个问题就很好解决了,可以用的方法在《图像处理(下)计算机视觉》中有提到过
e_feeling
2002-11-23
打赏
举报
回复
点阵字体放大出现锯齿,用什么插值方法可较好的消除锯齿????
yuga
2002-11-21
打赏
举报
回复
考虑一个浮点坐标(i+u,j+v)周围16个临点
PIXELCOLORRGB CImageGeometry::Interpolate(LPBYTE lpbySrcXY, int x, int y, float fu, float fv, int nScanWidth, int nScanHeight)
{
PIXELCOLORRGB rgb;
//行字节数, 可以将dwWidthBytes作为参数传递过来
DWORD dwWidthBytes = (DWORD)nScanWidth * 4;
switch(m_dwQuality)
{
case IMAGE_GEOMETRY_NEAREST_NEIGHBOR_INTERPOLATE :
{
BYTE* pbySrc = lpbySrcXY;
rgb.blue = *pbySrc++;
rgb.green = *pbySrc++;
rgb.red = *pbySrc++;
break;
}
case IMAGE_GEOMETRY_BILINEAR_INTERPOLATE :
{
//相邻的四个像素最右下角点的x, y坐标偏移量
int nx = 1;
int ny = 1;
if((x + 1) > (nScanWidth - 1)) nx = 0;
if((y + 1) > (nScanHeight - 1)) ny = 0;
//相邻四个像素的像素值
BYTE abyRed[2][2], abyGreen[2][2], abyBlue[2][2];
//像素点(x, y)的数据位置
BYTE* pbySrc = lpbySrcXY;
//获取像素数值.
//(x, y) = (x, y) + (0, 0)
abyBlue[0][0] = *pbySrc++;
abyGreen[0][0] = *pbySrc++;
abyRed[0][0] = *pbySrc++;
//(x + 1, y) = (x, y) + (1, 0)
pbySrc = (lpbySrcXY + nx * 4);
abyBlue[1][0] = *pbySrc++;
abyGreen[1][0] = *pbySrc++;
abyRed[1][0] = *pbySrc++;
//指向下一行数据
BYTE* pbySrcTemp = (lpbySrcXY + ny * dwWidthBytes);
//(x , y + 1) = (x, y) + (0, 1)
pbySrc = pbySrcTemp;
abyBlue[0][1] = *pbySrc++;
abyGreen[0][1] = *pbySrc++;
abyRed[0][1] = *pbySrc++;
//(x + 1, y + 1) = (x, y) + (1, 1)
pbySrc = pbySrcTemp + (4 * nx);
abyBlue[1][1] = *pbySrc++;
abyGreen[1][1] = *pbySrc++;
abyRed[1][1] = *pbySrc++;
rgb.red = (BYTE)(BOUND(((1 - fu) * (1 - fv) * ((float)abyRed[0][0]) +
(1 - fu) * fv * ((float)abyRed[0][1]) +
fu * (1 - fv) * ((float)abyRed[1][0]) +
fu * fv * ((float)abyRed[1][1])), 0, 255));
rgb.green = (BYTE)(BOUND(((1 - fu) * (1 - fv) * ((float)abyGreen[0][0]) +
(1 - fu) * fv * ((float)abyGreen[0][1]) +
fu * (1 - fv) * ((float)abyGreen[1][0]) +
fu * fv * ((float)abyGreen[1][1])), 0, 255));
rgb.blue = (BYTE)(BOUND(((1 - fu) * (1 - fv) * ((float)abyBlue[0][0]) +
(1 - fu) * fv * ((float)abyBlue[0][1]) +
fu * (1 - fv) * ((float)abyBlue[1][0]) +
fu * fv * ((float)abyBlue[1][1])), 0, 255));
break;
}
case IMAGE_GEOMETRY_THREE_ORDER_INTERPOLATE :
{
//像素坐标
int xx[4], yy[4];
//相邻四个像素的像素值
BYTE abyRed[4][4], abyGreen[4][4], abyBlue[4][4];
xx[0] = -1; xx[1] = 0; xx[2] = 1; xx[3] = 2;
yy[0] = -1; yy[1] = 0; yy[2] = 1; yy[3] = 2;
//保证合法
if((x - 1) < 0) xx[0] = 0;
if((x + 1) > (nScanWidth - 1)) xx[2] = 0;
if((x + 2) > (nScanWidth - 1)) xx[3] = ((xx[2] == 0) ? 0 : 1);
if((y - 1) < 0) yy[0] = 0;
if((y + 1) > (nScanHeight - 1)) yy[2] = 0;
if((y + 2) > (nScanHeight - 1)) yy[3] = ((yy[2] == 0) ? 0 : 1);
//像素点(x, y)的数据位置
//获取数据
int i;
for(i = 0;i < 4;i++)
{
//像素点(x, y)的数据位置
BYTE* pbySrcBase = lpbySrcXY + yy[i] * dwWidthBytes;
for(int j = 0;j < 4;j++)
{
BYTE* pbySrc = pbySrcBase + 4 * xx[j];
abyBlue[i][j] = *pbySrc++;
abyGreen[i][j] = *pbySrc++;
abyRed[i][j] = *pbySrc++;
}
}
//u, v向量
float afu[4], afv[4];
afu[0] = Sinxx(1.0f + fu);
afu[1] = Sinxx(fu);
afu[2] = Sinxx(1.0f - fu);
afu[3] = Sinxx(2.0f - fu);
afv[0] = Sinxx(1.0f + fv);
afv[1] = Sinxx(fv);
afv[2] = Sinxx(1.0f - fv);
afv[3] = Sinxx(2.0f - fv);
//矩阵乘向量的中间值
float afRed[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float afGreen[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float afBlue[4] = {0.0f, 0.0f, 0.0f, 0.0f};
for(i = 0;i < 4;i++)
{
for(int j = 0;j < 4;j++)
{
afRed[i] += afv[j] * abyRed[j][i];
afGreen[i] += afv[j] * abyGreen[j][i];
afBlue[i] += afv[j] * abyBlue[j][i];
}
}
rgb.red = (BYTE)(BOUND((afu[0] * afRed[0] + afu[1] * afRed[1] + afu[2] * afRed[2] +
afu[3] * afRed[3]), 0, 255));
rgb.green = (BYTE)(BOUND((afu[0] * afGreen[0] + afu[1] * afGreen[1] + afu[2] * afGreen[2] +
afu[3] * afGreen[3]), 0, 255));
rgb.blue = (BYTE)(BOUND((afu[0] * afBlue[0] + afu[1] * afBlue[1] + afu[2] * afBlue[2] +
afu[3] * afBlue[3]), 0, 255));
break;
}
default : break;
}//end switch
return rgb;
}
e_feeling
2002-11-21
打赏
举报
回复
yuga (棒榜)
你说说看? ?
yuga
2002-11-21
打赏
举报
回复
本来要告诉你的
既然你知道了我就不罗嗦了
分给我吧,呵呵
e_feeling
2002-11-21
打赏
举报
回复
我自己可能清楚了.
人眼视觉感知模型指导的有理函数图像插值
基于有理函数模型提出了一种新的自适应图像插值
算法
。此类有理函数具有简单显性数学表达式,且含有可调参数。当两个参数都等于 1 时, 有理函数变为
双三次插值
函数。基于有理函数构造图像插值曲面, 原始图像通过等值线分析自适应的分解为
平滑
和边缘两部分。其中自适应阈值根据有理函数构造原理来确定,思路是将人眼视觉感知与图像结构相融合, 对于像素结构简单视觉关注度低的
平滑
区域,采用
双三次插值
。对于像素结构复杂视觉关注度高的边缘区域,采用有理插值处理,参数是由人眼对比敏感特性来确定。实验表明本
算法
细节信息保持优于当前经典的图像插值
算法
, 具有较好的视觉效果。
基于样条函数的图像插值
算法
(2005年)
提出了结合图像边缘处理的双三次样条函数插值
算法
。采用双三次样条函数对原图像插值,提取得到的图像边缘,将边缘图像和插值后的图像叠加得到新的插值图像,这样解决了双三次样条函数的
平滑
作用,保持了图像的边缘特征。应用结果表明,用该方法对图像放大,可保持原图像的细节特征,视觉效果较好。
内功修炼之数据结构与
算法
排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、 多路查找树(B树B+树和B*树)、图、图的DFS
算法
和BFS、...
可行方向法的matlab代码-LutInterpolation:使用VHDL代码生成器快速
平滑
的表面B样条插值,可对规则间距的数据进行插值
可行方向法的matlab代码smoothLUT和Lut2Vhdl MATLAB类smoothLUT使用[1]中描述的
算法
为规则间隔的二维数据的快速且
平滑
的双三次B样条插值生成均匀的结。 MATLAB类Lut2Vdhl在VDHL代码中实现了相应的插值
算法
(也在[1]中进行了描述)。 [1] R. Mitze,D。Dillkötter,S。Gros,A。Schild和M.Mönnigmann。 快速,
平滑
的表面B样条插值用于系统建模中规则间隔的数据,使MPC实时可行。 欧洲控制会议2018(ECC18)的会议记录,利马索尔:667-672,2018 入门 从Github下载此存储库。 先决条件 要使用此类,您需要 的MATLAB 准备 打开MATLAB。 将文件smoothLUT.m和Lut2Vhdl.m添加到您的MATLAB路径。 现在您可以开始了! 使用smoothLUT和Lut2Vhdl 下面将简要介绍class smoothLUT和Lut2Vhdl 。 更详细的纪录片以 doc smoothLUT doc Lut2Vhdl 创建类smoothLUT的实例 可以为基于常规网格的二维查
各向异性四阶扩散正则化用于多帧超分辨率重建
提出了一种基于正则化的新颖方法用于超分辨率重建,以实现噪声去除和边缘保留之间的良好权衡。 该方法是通过使用L1范数作为数据保真度项和各向异性四阶扩散模型作为正则项来开发的,以约束重构图像的
平滑
度。 为了评估和证明该方法的性能,进行了一系列实验,并与一些现有方法进行了比较,包括
双三次插值
法和双边总变分法。 综合数据的数值结果表明,与双边总变分方法相比,该方法的PSNR改进平均大约为1.0906 dB,并且在真实视频上的结果表明,该
算法
在去除视觉伪影和保留边缘方面也有效在还原的图像中。
机器视觉
4,446
社区成员
15,335
社区内容
发帖
与我相关
我的任务
机器视觉
图形图像/机器视觉
复制链接
扫一扫
分享
社区描述
图形图像/机器视觉
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章