初学数字图像识别与处理——C++实现将一幅图像降质为多个低空间分辨率的图像
大家好! 初学数字图像识别与处理,导师推荐了一些书籍、视频还有编程题。该贴主要用于记录我的学学习,供以后的初学者参考及我自己的回忆。有问题的话,各位看官可以提出来。(PS.反正我是不会听得,哎,就是玩)
20210502
题目:编程将一幅图像降质为多个低空间分辨率的图像
1.概念分析
降质:(有点看不懂网上的解释)利用计算机对数字化的图像进行加工的技术。借助于数字图像处理可得到符合人们某些要求的新图像或非图像信息,以便于人的理解以及机器的识别。这些要求是:改善图像质量,压缩冗余信息,提取特征信息和识别静止或运动目标。(出自《中国电力百科全书》,但是为明确定义为降质,但是大概这个意思)
空间分辨率:空间分辨率,是指遥感图像上能够详细区分的最小单元的尺寸或大小,是用来表征影像分辨地面目标细节的指标。通常用像元大小、像解率或视场角来表示。(来自百度百科)
2.题目分析
首先看了网上的一些题目分析解释和代码(来自博主SurpriseDPD
地址:https://blog.youkuaiyun.com/weixin_42112828/article/details/86540343)
void CImage_ProcessingView::On2times()
{
// TODO: 在此添加命令处理程序代码
if (m_Image.IsNull()) return;//判断图像是否为空,如果对空图像进行操作会出现未知的错误
int w = m_Image.GetWidth();
int h = m_Image.GetHeight();
for(int m = 0;m<h/2;++m)//计算降质后图像大小
for (int n = 0; n < w / 2; ++n)
{
//取原图上2*2方阵的左上角像素赋值给降质图像的每个像素
for (int j = 2 * m; j < (2 * m + 2); j++)
{
for (int k = 2 * n; k < (2 * n + 2); k++)
{
if (j == 2 * m && k == 2 * n) //其余像素全部设置为白色
{
m_Image.m_pBits[0][m][n] = m_Image.m_pBits[0][j][k];
m_Image.m_pBits[1][m][n] = m_Image.m_pBits[1][j][k];
m_Image.m_pBits[2][m][n] = m_Image.m_pBits[2][j][k];
if (k >= h / 2 || j >= w / 2)
{
m_Image.m_pBits[0][j][k] = 255;
m_Image.m_pBits[1][j][k] = 255;
m_Image.m_pBits[2][j][k] = 255;
}
}
else
{
m_Image.m_pBits[0][j][k] = 255;
m_Image.m_pBits[1][j][k] = 255;
m_Image.m_pBits[2][j][k] = 255;
}
}
}
//取原图上2*2方阵的左上角像素赋值给降质图像的每个像素
}
Invalidate(1); //ONDRAW会绘制图像
}
————————————————
但是运行后,图像会多出一些东西:
在这里运行前的图像:
这是运行后的:
后面我乱理解了理解,好像置白色区域未选全,我改了改:
void CImage_ProcessingView::Onjiangzhi2()
{
// TODO: 在此添加命令处理程序代码
if (m_Image.IsNull()) return;//判断图像是否为空,如果对空图像进行操作会出现未知的错误
int w = m_Image.GetWidth();
int h = m_Image.GetHeight();
int w2 = w / 2;
int h2 = h / 2;//计算降质后图像大小
for (int j = 0; j<h; j++)
{
for (int k = 0; k<w; k++)
{
if (j < h2 && k < w2)
{
m_Image.m_pBits[0][j][k] = m_Image.m_pBits[0][j * 2][k * 2];
m_Image.m_pBits[1][j][k] = m_Image.m_pBits[1][j * 2][k * 2];
m_Image.m_pBits[2][j][k] = m_Image.m_pBits[2][j * 2][k * 2];
}
}
}//此处用来形成将降质后图像
for (int j = 0; j<h; j++)
{
for (int k = 0; k<w; k++)
{
if (j >= h2 || k >= w2)
{
m_Image.m_pBits[0][j][k] = 255;
m_Image.m_pBits[1][j][k] = 255;
m_Image.m_pBits[2][j][k] = 255;
}
}
}//此处用来将降质后图像之外的空间置白色
Invalidate(1); //ONDRAW会绘制图像
}
就是奇怪背景咋个不是白色,后面再看看啥意思。
来自博主SurpriseDPD 的代码 地址:https://blog.youkuaiyun.com/weixin_42112828/article/details/86540343