梯度锐化法
对于离散的图像而言,一阶偏导数采用一阶差分近似表示为
为简化运算,经常采用梯度算子算法
void CMFCworkDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
Mat image = imread("ema.jpg", 1);
Mat image_gray = gray_img(image);
Mat result, grad;
result.create(image.size(), CV_8UC1);
grad.create(image.size(), CV_8UC1);
//因为最后一行最后一列没有办法计算梯度所以,使用原图填充,先试用灰度图进行初始化
for (int i = 0; i < image_gray.rows; i++)
{
for (int j = 0; j < image_gray.cols ; j++)
{
result.at<uchar>(i, j) =image_gray.at<char>(i, j);
}
}
for (int i = 1; i < image_gray.rows - 1; i++)
{
for (int j = 1; j < image_gray.cols - 1; j++)
{
grad.at<uchar>(i, j) = saturate_cast<uchar>(fabs(image_gray.at<uchar>(i, j) - image_gray.at<uchar>(i - 1, j)));//+ fabs(image_gray.at<uchar>(i, j) - image_gray.at<uchar>(i , j-1))
result.at<uchar>(i, j) = saturate_cast<uchar>( image_gray.at<uchar>(i, j) - fabs(image_gray.at<uchar>(i, j) - image_gray.at<uchar>(i - 1, j)));
}
}
imshow("灰度图", image_gray);
imshow("梯度", grad);
imshow("梯度锐化",result);
waitKey(0);
}