Emgucv Unsharp Mask USM 예화 알고리즘 실현

6055 단어 ImageProcessASP.NET
USM 알고리즘 은 PS 에서 자주 사용 하 는 알고리즘 으로 원 리 는 인터넷 에서 볼 수 있 는데 이것 은 주로 실 현 된 코드 이다.opencv 가 USM 알고리즘 을 실현 하 는 코드 는:
void ImageSharp(Mat &src, Mat &dst, int nAmount = 200)
{
    double sigma = 3;
    int threshold = 1;
    float amount = nAmount / 100.0f;
    Mat imgBlurred;
    GaussianBlur(src, imgBlurred, Size(), sigma, sigma);
    Mat lowContrastMask = abs(src - imgBlurred)"ddd", lowContrastMask);
    dst = src*(1 + amount) + imgBlurred*(-amount);
    src.copyTo(dst, lowContrastMask);
}

Emgucv 구현 코드 로 변경: private void GetMat(Imagebyte> srcimg, Imagebyte> imgBlurred, ref Mat dst, int nAmount = 200) { float amount = nAmount / 100f; using (Imagebyte> dst_temp = new Imagebyte>(srcimg.Width, srcimg.Height)) { for (int v = 0; v < srcimg.Height; v++) { for (int u = 0; u < srcimg.Width; u++) { byte a = srcimg.Data[v, u, 0]; //Get Pixel Color | fast way byte b = imgBlurred.Data[v, u, 0]; int c = (int)(a * (1 + amount) - (amount * b)); if (c < 0) c = 0; if (c > 255) c = 255; dst_temp.Data[v, u, 0] = (byte)c; } } dst = dst_temp.Mat.Clone(); } } /// /// /// /// /// /// /// /// public void getSharpenImage(Mat src, ref Mat dst, int nAmount = 200, double sigma = 3, int threshold = 0) { float amount = nAmount / 100.0F; using (Mat imgBlurred = new Mat()) { CvInvoke.GaussianBlur(src, imgBlurred, new Size(0, 0), sigma, sigma); using (Mat mask_temp = new Mat()) { CvInvoke.AbsDiff(src, imgBlurred, mask_temp); using (Mat lowcontrastmask = new Mat()) { CvInvoke.Threshold(mask_temp, lowcontrastmask, threshold, 255, ThresholdType.BinaryInv); GetMat(src.ToImagebyte>(), imgBlurred.ToImagebyte>(), ref dst); src.CopyTo(dst, lowcontrastmask); } } } }
원본 그림: 예화 후:

좋은 웹페이지 즐겨찾기