用凡科做网站需要花钱吗,中小学 网站建设 通知,企业网络组网设计,前端如何兼职做网站图像变换#xff1a;点运算、灰度变换、直方图变换 1.点运算(1)What(2)Why 2.灰度变换(1)What(2)Why(作用)(3)Which(有哪些灰度变换#xff09; 3.直方图修正(1)直方图均衡化 1.点运算
(1)What
通过点运算#xff0c;输出图像的每个像素的灰度值仅仅取决于输入图像中相对应… 图像变换点运算、灰度变换、直方图变换 1.点运算(1)What(2)Why 2.灰度变换(1)What(2)Why(作用)(3)Which(有哪些灰度变换 3.直方图修正(1)直方图均衡化 1.点运算
(1)What
通过点运算输出图像的每个像素的灰度值仅仅取决于输入图像中相对应像素的灰度值。
(2)Why
点运算的作用实现图像增强的常用方法之一
2.灰度变换
(1)What
灰度变换是一种点运算的具体形式换句话说灰度变换是点运算的一种运用
(2)Why(作用)
增强对比度是增强图像的重要手段途径和方法
改善图像的质量显示更多细节进行对比度拉伸突出感兴趣的特征针对图像中感兴趣的区域进行突出或抑制
(3)Which(有哪些灰度变换
核心灰度变换函数的不同
A.线性灰度变换 y k * f(x) b 当k1对比度将增大 当k1对比度将减小 当k1b!0图像整体变亮或变暗 当k-1b255图像灰度正好相反 当k0b0暗区域变亮亮区域变暗B.分段线性灰度变换 确定分段函数的三个k值和b值即可实现分段灰度变换效果。 分段线性灰度变换的效果对参数的选取依赖很高当参数选取不好的时候不但无法实现增强图像的效果还可能变得更加糟糕。为此实现自适应选取成为分段线性灰度变换的关键。目前常用的方法有自适应最小误差法、多尺度逼近方法 和 恒增强率方法等。
C.非线性变换-对数变换 g(x) c * log(1f(x))D.非线性变换-反对数变换 g(x) ( (f(x)1)^r -1 ) / f(x)E.非线性变换-幂律变换 g(x) c*f(x)^alpha
3.直方图修正
(1)直方图均衡化
直方图均衡化可实现图像的自动增强但效果不易控制得到的是全局增强的结果step01统计每一个灰度级的数量
// 统计输入图像的灰度级数量
std::vectorint vNk(256, 0);
int iTotal imDst.total();
for (int i 0; i imDst.total(); i)
{vNk[imDst.data[i]];
}step02求累积分布
// 求累积分布函数
for (int i 1; i 256; i)
{vNk[i] vNk[i] vNk[i - 1];
}step03建立映射关系
// 确定映射关系
std::vectordouble vMPk(256, 0.0);
for (int i 0; i 256; i)
{vMPk[i] 255.0f * (double)vNk[i] / iTotal;
}
// 重新赋值实现均衡化
for (int i 0; i iTotal; i)
{imDst.data[i] vMPk[imDst.data[i]];
}代码汇总如下可直接使用
/* 图像均衡化 */
int ImgEqualize(const cv::Mat imSrc, cv::Mat imDst) {// 对输入的数据进行可靠性判定if (imSrc.empty()) return -1;// 对输入图像进行灰度化处理if (imSrc.channels() 3)cv::cvtColor(imSrc, imDst, cv::COLOR_RGB2GRAY);else imDst imSrc;// 统计输入图像的灰度级数量std::vectorint vNk(256, 0);int iTotal imDst.total();for (int i 0; i imDst.total(); i){vNk[imDst.data[i]];}// 求累积分布函数for (int i 1; i 256; i){vNk[i] vNk[i] vNk[i - 1];}// 确定映射关系std::vectordouble vMPk(256, 0.0);for (int i 0; i 256; i){vMPk[i] 255.0f * (double)vNk[i] / iTotal;}// 重新赋值实现均衡化for (int i 0; i iTotal; i){imDst.data[i] vMPk[imDst.data[i]];}}