OpenCV中文网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 安装 配置
查看: 958|回复: 16

计算得到了亚像素坐标后,怎么输出成像啊

[复制链接]
发表于 2018-5-14 15:49:52 | 显示全部楼层 |阅读模式
我是做亚像素边缘提取的,亚像素坐标已经计算出来了,但是要怎么进行输出呢?求助!
回复

使用道具 举报

发表于 2018-5-14 16:33:13 | 显示全部楼层
方便贴一下源码吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-14 16:52:13 | 显示全部楼层
JoeAaron 发表于 2018-5-14 16:33
方便贴一下源码吗?

算法计算参考了现有的他人论文,仅以此学习

Grayscalegradientcalculation::Grayscalegradientcalculation(const Mat src,Mat Gradientcalculation,Mat subpixelresult){
       
        for (int i = 1; i < src.rows - 3; i++)
        {
                for (int j = 1; j < src.cols - 3; j++)
                {
                        int value00 = src.at<uchar>(i - 1, j - 1);
                        int value01 = src.at<uchar>(i - 1, j);
                        int value02 = src.at<uchar>(i - 1, j + 1);
                        int value03 = src.at<uchar>(i - 1, j + 2);
                        int value04 = src.at<uchar>(i - 1, j + 3);

                        int value10 = src.at<uchar>(i, j - 1);
                        int value11 = src.at<uchar>(i, j);
                        int value12 = src.at<uchar>(i, j + 1);
                        int value13 = src.at<uchar>(i, j + 2);
                        int value14 = src.at<uchar>(i, j + 3);

                        int value20 = src.at<uchar>(i + 1, j - 1);
                        int value21 = src.at<uchar>(i + 1, j);
                        int value22 = src.at<uchar>(i + 1, j + 1);
                        int value23 = src.at<uchar>(i + 1, j + 2);
                        int value24 = src.at<uchar>(i + 1, j + 3);

                        int value30 = src.at<uchar>(i + 2, j - 1);
                        int value31 = src.at<uchar>(i + 2, j);
                        int value32 = src.at<uchar>(i + 2, j + 1);
                        int value33 = src.at<uchar>(i + 2, j + 2);
                        int value34 = src.at<uchar>(i + 2, j + 3);

                        int value40 = src.at<uchar>(i + 3, j - 1);
                        int value41 = src.at<uchar>(i + 3, j);
                        int value42 = src.at<uchar>(i + 3, j + 1);
                        int value43 = src.at<uchar>(i + 3, j + 2);
                        int value44 = src.at<uchar>(i + 3, j + 3);
                       
                        int Gradientdirectionmin;
                        int Gradientdirection0 = abs(value20 - value21) + abs(value21 - value22) + abs(value22 - value23) + abs(value23 - value24);
                        int Gradientdirection1 = abs(value40 - value32) + abs(value32 - value22) + abs(value22 - value13) + abs(value13 - value04);
                        int Gradientdirection2 = abs(value42 - value32) + abs(value32 - value22) + abs(value22 - value12) + abs(value12 - value02);
                        int Gradientdirection3 = abs(value44 - value33) + abs(value33 - value22) + abs(value22 - value11) + abs(value11 - value00);

                        if (Gradientdirection0 <=Gradientdirection1){
                                Gradientdirectionmin = Gradientdirection0;
                        }else Gradientdirectionmin = Gradientdirection1;

                        if (Gradientdirectionmin <= Gradientdirection2) {
                                Gradientdirectionmin = Gradientdirectionmin;
                        }else Gradientdirectionmin = Gradientdirection2;

                        if (Gradientdirectionmin<= Gradientdirection3) {
                                Gradientdirectionmin = Gradientdirectionmin;
                        }else Gradientdirectionmin = Gradientdirection3;

                        if (Gradientdirectionmin = Gradientdirection0) {
                                Gradientcalculation.at<uchar>(i + 1, j - 1) = src.at<uchar>(i + 1, j - 1);
                                Gradientcalculation.at<uchar>(i + 1, j) = src.at<uchar>(i + 1, j);     
                                Gradientcalculation.at<uchar>(i + 1, j + 1) = src.at<uchar>(i + 1, j + 1);
                                Gradientcalculation.at<uchar>(i + 1, j + 2) = src.at<uchar>(i + 1, j + 2);
                                Gradientcalculation.at<uchar>(i + 1, j + 3) = src.at<uchar>(i + 1, j + 3);
       
                                double A = 0.00;
                                double B = 0.00;
                                double C = 0.00;
                                double Xsp = 0.00;
                                double xsp;
                                double ysp;
                                A = ((Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) - (Gradientcalculation.at<uchar>(i + 1, j + 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) * 4) / (-7);
                                B = (Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3) - 4 * A) / 4;
                                C = Gradientcalculation.at<uchar>(i + 1, j + 3) - A - B;
                                if (A != 0) {
                                Xsp = -(B / 2 * A);
                                }
                                else{
                                A = 0.00000000001;
                                Xsp = -(B / 2 * A);
                                }

                                //计算亚像素坐标,下方计算方式相同
                                if (src.at<uchar>(i, j) > 0) {
                                        xsp = i;
                                        ysp = i + Xsp;               
                               
                                }
                        }
                        else if(Gradientdirectionmin = Gradientdirection1) {
                                Gradientcalculation.at<uchar>(i + 3, j - 1) = src.at<uchar>(i + 3, j - 1);
                                Gradientcalculation.at<uchar>(i + 2, j + 1) = src.at<uchar>(i + 2, j );
                                Gradientcalculation.at<uchar>(i + 1, j + 1) = src.at<uchar>(i + 1, j + 1);
                                Gradientcalculation.at<uchar>(i, j + 2) = src.at<uchar>(i, j + 2);
                                Gradientcalculation.at<uchar>(i - 1, j + 3) = src.at<uchar>(i - 1, j + 3);
                                double A = 0.00;
                                double B = 0.00;
                                double C = 0.00;
                                double Xsp = 0.00;
                                double xsp;
                                double ysp;
                                A = ((Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) - (Gradientcalculation.at<uchar>(i + 1, j + 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) * 4) / (-7);
                                B = (Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3) - 4 * A) / 4;
                                C = Gradientcalculation.at<uchar>(i + 1, j + 3) - A - B;
                                if (A != 0) {
                                        Xsp = -(B / 2 * A);
                                }
                                else {
                                        A = 0.00000000001;
                                        Xsp = -(B / 2 * A);
                                }
                                if (src.at<uchar>(i, j) > 0) {
                                        xsp = i + Xsp * (sqrt(2) / 2);
                                        ysp = i + Xsp * (sqrt(2) / 2);
                                       
                                       
                                }
                        }
                        else if (Gradientdirectionmin = Gradientdirection2) {
                                Gradientcalculation.at<uchar>(i + 3, j + 1) = src.at<uchar>(i + 3, j + 1);//42
                                Gradientcalculation.at<uchar>(i + 2, j + 1) = src.at<uchar>(i + 2, j + 1);//32
                                Gradientcalculation.at<uchar>(i + 1, j + 1) = src.at<uchar>(i + 1, j + 1);//22
                                Gradientcalculation.at<uchar>(i, j + 1) = src.at<uchar>(i, j + 1);//12
                                Gradientcalculation.at<uchar>(i - 1, j + 1) = src.at<uchar>(i - 1, j + 1);//02
                                double A = 0.00;
                                double B = 0.00;
                                double C = 0.00;
                                double Xsp = 0.00;
                                double xsp;
                                double ysp;
                                A = ((Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) - (Gradientcalculation.at<uchar>(i + 1, j + 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) * 4) / (-7);
                                B = (Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3) - 4 * A) / 4;
                                C = Gradientcalculation.at<uchar>(i + 1, j + 3) - A - B;
                                if (A != 0) {
                                        Xsp = -(B / 2 * A);
                                }
                                else {
                                        A = 0.00000000001;
                                        Xsp = -(B / 2 * A);
                                }
                                if (src.at<uchar>(i, j) > 0) {
                                        xsp = i + Xsp;
                                        ysp = i;
                                       
                                       
                                }
                        }
                        else if (Gradientdirectionmin = Gradientdirection3) {
                                Gradientcalculation.at<uchar>(i + 3, j + 3) = src.at<uchar>(i + 3, j + 3);
                                Gradientcalculation.at<uchar>(i + 2, j + 2) = src.at<uchar>(i + 2, j + 2);
                                Gradientcalculation.at<uchar>(i + 1, j + 1) = src.at<uchar>(i + 1, j + 1);
                                Gradientcalculation.at<uchar>(i, j) = src.at<uchar>(i, j);
                                Gradientcalculation.at<uchar>(i - 1, j - 1) = src.at<uchar>(i - 1, j - 1);
                                double A = 0.00;
                                double B = 0.00;
                                double C = 0.00;
                                double Xsp = 0.00;
                                double xsp;
                                double ysp;
                                A = ((Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) - (Gradientcalculation.at<uchar>(i + 1, j + 1) - Gradientcalculation.at<uchar>(i + 1, j + 3)) * 4) / (-7);
                                B = (Gradientcalculation.at<uchar>(i + 1, j - 1) - Gradientcalculation.at<uchar>(i + 1, j + 3) - 4 * A) / 4;
                                C = Gradientcalculation.at<uchar>(i + 1, j + 3) - A - B;
                                if (A != 0) {
                                        Xsp = -(B / 2 * A);
                                }
                                else {
                                        A = 0.00000000001;
                                        Xsp = -(B / 2 * A);
                                }
                                if (src.at<uchar>(i,j)>0) {
                                        xsp = i + Xsp * (sqrt(2) / 2);
                                        ysp = i + Xsp * (sqrt(2) / 2);
                                       
                                       
                                }
                        }
                       
                }
        }
       
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-14 16:58:50 | 显示全部楼层
JoeAaron 发表于 2018-5-14 16:33
方便贴一下源码吗?

初次学习 代码写的不规范的地方也希望指教一下,QAQ
回复 支持 反对

使用道具 举报

发表于 2018-5-14 17:25:23 | 显示全部楼层
结果都出来了,怎么输出?是界面还是直接打印?
方便的话留个联系方式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-14 17:52:50 | 显示全部楼层
JoeAaron 发表于 2018-5-14 17:25
结果都出来了,怎么输出?是界面还是直接打印?
方便的话留个联系方式

我在前面的步骤已经完成了边缘提取了,这一步求出了亚像素坐标,打算输出他的亚像素边缘提取图片,但是想了好久都没找到方法
回复 支持 反对

使用道具 举报

发表于 2018-5-15 16:32:34 | 显示全部楼层
你的亚像素坐标的算法可以给我看看吗?最近在学习  QQ1459984437
回复 支持 反对

使用道具 举报

发表于 2018-5-15 16:34:04 | 显示全部楼层
或者论文可以告诉我是哪一篇吗
回复 支持 反对

使用道具 举报

发表于 2018-5-17 15:54:58 | 显示全部楼层
你找到输出坐标的方法了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-17 16:13:11 | 显示全部楼层
amanda_ 发表于 2018-5-17 15:54
你找到输出坐标的方法了吗

没呢
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|blog|OpenCV中文网站 ( 粤ICP备13079875号-2

GMT+8, 2018-8-22 01:25 , Processed in 0.027227 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表