反走样算法

您所在的位置:网站首页 什么是svu车 反走样算法

反走样算法

2023-10-05 05:31| 来源: 网络整理| 查看: 265

加权区域取样 算法理论

提高分辨率、简单区域取样都有其局限性,在此讨论加权区域取样。 加权区域取样以像素所在位置对圆锥滤波器进行积分,据此判断距直线某像素点的灰度值。总体根据中点直线算法,并对直线上下两点计算其灰度值实现。具体有其递推的算法,不再详述。

算法实现 #include #include #include #include using namespace std; using namespace cv; float Filter[16] = { 0.524, 0.461, 0.401, 0.343, 0.289, 0.238, 0.193, 0.151, 0.115, 0.084, 0.059, 0.038, 0.022, 0.011, 0.004, 0 }; //沈强等,计算机图形学反走样技术及实现 void Gupta_Sproull(Mat& m, const int x0, const int y0, const int x1, const int y1); void aDrawPixel(Mat& m, int x, int y, double distance); int main(){ Mat imageROI = Mat(500, 1000, CV_8UC1,Scalar(255,255,255) ); Gupta_Sproull(imageROI, 10, 10, 200, 100); namedWindow("显示结果"); imshow("显示结果", imageROI); waitKey(); } void Gupta_Sproull(Mat& m, const int x0, const int y0, const int x1, const int y1){ int a = y0 - y1; int b = x1 - x0; int d0 = 2 * a + b; int delta1 = 2 * a; int delta2 = 2 * (a + b); int x, y, d; int t; double p, q; t = 0; p = 1 / (2 * sqrt(a*a + b*b)); q = -2 * b*p; x = x0; y = y0; d = d0; aDrawPixel(m, x, y, 0); aDrawPixel(m, x, y + 1, q); aDrawPixel(m, x, y - 1, q); while (x < x1){ if (d < 0){ t = d + b; x++; y++; d += delta2; } else{ t = d - b; x++; d += delta1; } aDrawPixel(m, x, y, t*p); aDrawPixel(m, x, y + 1, q - t*p); aDrawPixel(m, x, y - 1, q + t*p); } } void aDrawPixel(Mat& m, int x, int y, double distance){ float intensity; intensity = Filter[16-int(abs(distance)*16)]; m.at(y, x) =intensity * 255; }

实现结果如图 这里写图片描述 画出来不知道为什么感觉更违和了。。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3