matlab拉普拉斯算子锐化,cv-拉普拉斯算子锐化浅析

式(3.7.1)中的二维拉普拉斯数字实现可由这两个分量相加得到:

从而得到拉普拉斯算子

意思同上面的一阶微分算子相同。

这里解释一下微分算子的使用,很简单,如上面这个就是在处理每个像素点的RGB值时,将该像素的RGB三个值乘以4然后减去他上向左右四个像素点的RGB值,注意R、G、B分别处理。

这样是变化的表示,我们要想图片锐化,应该把这种变化叠加到原像素就行了,也就是

1460000007722626?w=558&h=62

思路很简单。

一下为自己实现图像基于拉普拉斯算子的锐化过程:

void sharpen(const Mat &img, Mat &result)

{

for (int j = 1; j < img.rows - 1; ++j)

{

const uchar *previous = img.ptr(j - 1);

const uchar *current = img.ptr(j);

const uchar *next = img.ptr(j + 1);

uchar *output = result.ptr(j);

for (int i = 1; i < 3 * (img.cols - 1); ++i)//这里是基于RGB图的,如果非RGB图则无需这样

{

*output++ = cv::saturate_cast(

5 * current[i] - current[i - 1] - current[i + 1]

- previous[i] - next[i]);

}

}

result.row(0).setTo(cv::Scalar(0));

result.row(result.rows - 1).setTo(cv::Scalar(0));

result.col(0).setTo(cv::Scalar(0));

result.col(result.cols - 1).setTo(cv::Scalar(0));

}

以下为使用opencv中的fiter2D函数通过拉普拉斯算子实现锐化操作的代码

int main()

{

Mat img, resulta;

img = imread("C:/Users/Administrator/Desktop/bbb.jpg");

cv::Mat kernela(3, 3, CV_32F, cv::Scalar(0));

// assigns kernel values

kernela.at(1, 1) = 5.0;

kernela.at(0, 1) = -1.0;

kernela.at(2, 1) = -1.0;

kernela.at(1, 0) = -1.0;

kernela.at(1, 2) = -1.0;

filter2D(img, resulta, img.depth(), kernela);

//cout << img.rowRange(1, 4).colRange(1, 4) << endl;

//cout << result.rowRange(1, 4).colRange(1, 4) << endl;

imwrite("C:/Users/Administrator/Desktop/solved.jpg", resulta);

//imshow("origin", img);

//imshow("锐化结果", resulta);

waitKey(0);

return 0;

}

原始图片

1460000007722627?w=650&h=219

锐化后图片

1460000007722628?w=650&h=219

欢迎访问本人另一个博客凌风技术站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值