点击链接→【数字图像处理】简单实践汇总
1. 加噪
srand((int)time(0));
srcImage = imread("src.jpg", 0);
imshow(WIMDOW_NAME, srcImage);
//加噪
Mat addImage = imread("3.jpg", 0);
for (int i = 0; i < addImage.rows; i++)
{
for (int j = 0; j < addImage.cols; j++)
{
if (rand() % 20 == 1)//范围是0-32767,除以20余1的概率约5%
{
addImage.at<uchar>(i, j) = 255;
}
}
}
imshow("加噪", addImage);
2. 平滑
- 平滑用的是最简单的均值滤波器:
//平滑
Mat pinghuaImage = imread("addImage.jpg", 0);
for (int i = 1; i < pinghuaImage.rows-1; i++)
{
for (int j = 1; j < pinghuaImage.cols-1; j++)
{
pinghuaImage.at<uchar>(i, j) = (addImage.at<uchar>(i - 1, j - 1)
+ addImage.at<uchar>(i - 1, j )
+ addImage.at<uchar>(i - 1, j + 1)
+ addImage.at<uchar>(i , j - 1)
+ addImage.at<uchar>(i , j )
+ addImage.at<uchar>(i , j + 1)
+ addImage.at<uchar>(i + 1, j - 1)
+ addImage.at<uchar>(i + 1, j )
+ addImage.at<uchar>(i + 1, j + 1))/9;
}
}
imshow("平滑", pinghuaImage);
3. 加噪锐化
- 锐化用的是一种Roberts算法(交叉差分),可以发现竖边缘:
Mat ruihuaImage = imread("addImage.jpg", 0);
for (int i = 0; i < ruihuaImage.rows - 1; i++)
{
for (int j = 0; j < ruihuaImage.cols - 1; j++)
{
ruihuaImage.at<uchar>(i, j) = abs(ruihuaImage.at<uchar>(i, j) - ruihuaImage.at<uchar>(i + 1, j + 1))
+ abs(ruihuaImage.at<uchar>(i + 1, j) - ruihuaImage.at<uchar>(i, j + 1));
}
}
4. 原图锐化
//原图锐化
Mat ruihuaImage2 = imread("3.jpg", 0);
for (int i = 0; i < ruihuaImage2.rows - 1; i++)
{
for (int j = 0; j < ruihuaImage2.cols - 1; j++)
{
ruihuaImage2.at<uchar>(i, j) = abs(ruihuaImage2.at<uchar>(i, j) - ruihuaImage2.at<uchar>(i + 1, j + 1))
+ abs(ruihuaImage2.at<uchar>(i + 1, j) - ruihuaImage2.at<uchar>(i, j + 1));
}
}
imshow("原图锐化", ruihuaImage2);