基於OpenCvSharp的數字圖像處理 - 圖像優化

在直方圖一章裏提到的直方圖均衡化就是一種圖像優化的方法。本章再介紹圖像修復和去噪兩種方法。

一、圖像修復

這裏所介紹的圖像修復是很簡單的,就是用周邊區域的像素填充損壞區域。代碼如下:

Mat src = new Mat(img_lenna_bad);

//找出損壞區域
Mat mask = new Mat(src.Size(), MatType.CV_8UC1, new Scalar(0));
for (int i = 0; i < src.Width; i++)
{
    for (int j = 0; j < src.Height; j++)
    {
        Vec3b color = src.Get<Vec3b>(j, i);
        if (color[0] + color[1] + color[2] > 750)
        {
            mask.Set<byte>(j, i, 1);
            mask.Set<byte>(j + 1, i, 1);
            mask.Set<byte>(j, i + 1, 1);
            mask.Set<byte>(j - 1, i, 1);
            mask.Set<byte>(j, i - 1, 1);
            mask.Set<byte>(j + 1, i + 1, 1);
            mask.Set<byte>(j - 1, i - 1, 1);
            mask.Set<byte>(j + 1, i - 1, 1);
            mask.Set<byte>(j - 1, i + 1, 1);
        }
    }
}

Mat result = new Mat();
Cv2.Inpaint(src, mask, result, 5, InpaintMethod.Telea);
result.SaveImage(img_result);

其效果如下所示:

二、去噪

在圖像平滑一章裏,我們介紹了圖像平滑可以去除一些噪聲,而中值濾波又可以去除椒鹽噪聲。這裏所說的去噪所用的方法是FNLMD。代碼如下:

Mat src = new Mat(img_lenna_noise);
src = src.CvtColor(ColorConversionCodes.BGR2Lab);//轉換到Lab空間有更好的效果

Mat result = new Mat();
Cv2.FastNlMeansDenoisingColored(src, result);

result = result.CvtColor(ColorConversionCodes.Lab2BGR);
result.SaveImage(img_result);

其效果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章