没有合适的资源?快使用搜索试试~ 我知道了~
双边滤波+极坐标转换(opencv)
需积分: 10 12 下载量 171 浏览量
2017-12-11
23:50:43
上传
评论
收藏 5KB TXT 举报
温馨提示
试读
7页
输入图像路径就可以使用,可以选择把数据保存为txt或者xml格式
资源推荐
资源详情
资源评论
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <fstream>
#include <iostream>
#define PI 3.1416
//主要步骤:读入IVUS图像,经过双边滤波处理和极坐标转换直角坐标
//然后把矩阵保存成value.txt,然后再利用matlab中的test_conti.m进行下一步的处理
using namespace cv;
using namespace std;
bool polar_to_cartesian(cv::Mat& mat_p, cv::Mat& mat_c, int rows_c, int cols_c)
{
mat_c = cv::Mat::zeros(rows_c, cols_c, CV_8UC1);
int polar_d = mat_p.cols;
double polar_r = polar_d / 2.0; // 圆图半径
double delta_r = polar_r / rows_c; //半径因子
double delta_t = 2.0*PI / cols_c; //角度因子
double center_polar_x = (polar_d - 1) / 2.0;
double center_polar_y = (polar_d - 1) / 2.0;
for (int i = 0; i < cols_c; i++)
{
double theta_p = i * delta_t; //方图第i列在圆图对应线的角度
double sin_theta = std::sin(theta_p);
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <fstream>
#include <iostream>
#define PI 3.1416
//主要步骤:读入IVUS图像,经过双边滤波处理和极坐标转换直角坐标
//然后把矩阵保存成value.txt,然后再利用matlab中的test_conti.m进行下一步的处理
using namespace cv;
using namespace std;
bool polar_to_cartesian(cv::Mat& mat_p, cv::Mat& mat_c, int rows_c, int cols_c)
{
mat_c = cv::Mat::zeros(rows_c, cols_c, CV_8UC1);
int polar_d = mat_p.cols;
double polar_r = polar_d / 2.0; // 圆图半径
double delta_r = polar_r / rows_c; //半径因子
double delta_t = 2.0*PI / cols_c; //角度因子
double center_polar_x = (polar_d - 1) / 2.0;
double center_polar_y = (polar_d - 1) / 2.0;
for (int i = 0; i < cols_c; i++)
{
double theta_p = i * delta_t; //方图第i列在圆图对应线的角度
double sin_theta = std::sin(theta_p);
double cos_theta = std::cos(theta_p);
for (int j = 0; j < rows_c; j++)
{
double temp_r = j * delta_r; //方图第j行在圆图上对应的半径长度
int polar_x = (int)(center_polar_x + temp_r * cos_theta);
int polar_y = (int)(center_polar_y - temp_r * sin_theta);
mat_c.ptr<uchar>(j)[i] = mat_p.ptr<uchar>(polar_y)[polar_x];
}
}
return true;
}
uchar interpolate_bilinear(cv::Mat& mat_src, double ri, int rf, int rc, double ti, int tf, int tc)
{
double inter_value = 0.0;
if (rf == rc && tc == tf)
{
inter_value = mat_src.ptr<uchar>(rc)[tc];
}
else if (rf == rc)
{
inter_value = (ti - tf) * mat_src.ptr<uchar>(rf)[tc] + (tc - ti) * mat_src.ptr<uchar>(rf)[tf];
}
else if (tf == tc)
{
inter_value = (ri - rf) * mat_src.ptr<uchar>(rc)[tf] + (rc - ri) * mat_src.ptr<uchar>(rf)[tf];
}
for (int j = 0; j < rows_c; j++)
{
double temp_r = j * delta_r; //方图第j行在圆图上对应的半径长度
int polar_x = (int)(center_polar_x + temp_r * cos_theta);
int polar_y = (int)(center_polar_y - temp_r * sin_theta);
mat_c.ptr<uchar>(j)[i] = mat_p.ptr<uchar>(polar_y)[polar_x];
}
}
return true;
}
uchar interpolate_bilinear(cv::Mat& mat_src, double ri, int rf, int rc, double ti, int tf, int tc)
{
double inter_value = 0.0;
if (rf == rc && tc == tf)
{
inter_value = mat_src.ptr<uchar>(rc)[tc];
}
else if (rf == rc)
{
inter_value = (ti - tf) * mat_src.ptr<uchar>(rf)[tc] + (tc - ti) * mat_src.ptr<uchar>(rf)[tf];
}
else if (tf == tc)
{
inter_value = (ri - rf) * mat_src.ptr<uchar>(rc)[tf] + (rc - ri) * mat_src.ptr<uchar>(rf)[tf];
}
剩余6页未读,继续阅读
资源评论
ByteH_
- 粉丝: 0
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功