Emgucv Unsharp Mask 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);
}
}
}
}
원본 그림: 예화 후:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
4. 볼록 렌즈 효과 알고리즘내 가 보기에 볼록 렌즈 효과 의 본질은 일종 의 삽입 값 알고리즘 인 렌즈 중심의 물 체 는 일정한 확 대 를 얻 고 상응하는 가장자리 가 압축 되 며 가장자리 가 연속 되 어야 이미지 가 조 화 롭 고 자 연 스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.