private string reconhecerCaptcha(Image img) { Bitmap imagem = new Bitmap(img); imagem = imagem.Clone(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); Erosion erosion = new Erosion(); Dilatation dilatation = new Dilatation(); Invert inverter = new Invert(); ColorFiltering cor = new ColorFiltering(); cor.Blue = new AForge.IntRange(200, 255); cor.Red = new AForge.IntRange(200, 255); cor.Green = new AForge.IntRange(200, 255); Opening open = new Opening(); BlobsFiltering bc = new BlobsFiltering(); Closing close = new Closing(); GaussianSharpen gs = new GaussianSharpen(); ContrastCorrection cc = new ContrastCorrection(); bc.MinHeight = 10; FiltersSequence seq = new FiltersSequence(gs, inverter, open, inverter, bc, inverter, open, cc, cor, bc, inverter); pictureBox.Image = seq.Apply(imagem); string reconhecido = OCR((Bitmap)pictureBox.Image); return reconhecido; }
private void cBFilters_SelectedIndexChanged(object sender, EventArgs e) { Bitmap pictureTransform = (Bitmap)pbChoose.Image; if ((string)cBFilters.SelectedItem == "HSL_Filter") { AForge.Imaging.Filters.SaturationCorrection filter = new SaturationCorrection(0.1); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Mediana") { AForge.Imaging.Filters.Median filter = new Median(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } /*if ((string)cBFilters.SelectedItem == "Fourier_Transformation") { Complex[] dst = new Complex[n]; AForge.Math.FourierTransform filter = AForge.Math.FourierTransform.DFT();// .FromBitmap(pictureTransform); Bitmap newImage = filter.Apply(); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; }*/ if ((string)cBFilters.SelectedItem == "Binarization") { pictureTransform = Grayscale.CommonAlgorithms.BT709.Apply(pictureTransform); Threshold threshold = new Threshold(127); threshold.ApplyInPlace(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = pictureTransform; } if ((string)cBFilters.SelectedItem == "Grayscale") { AForge.Imaging.Filters.Grayscale filter = new AForge.Imaging.Filters.Grayscale(0.2125, 0.7154, 0.0721); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "FillHoles") { pictureTransform = Grayscale.CommonAlgorithms.BT709.Apply(pictureTransform); Threshold threshold = new Threshold(127); threshold.ApplyInPlace(pictureTransform); AForge.Imaging.Filters.FillHoles filter = new AForge.Imaging.Filters.FillHoles(); filter.MaxHoleHeight = 5; filter.MaxHoleWidth = 15; filter.CoupledSizeFiltering = false; Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Opening") { AForge.Imaging.Filters.Opening filter = new AForge.Imaging.Filters.Opening(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Closing") { AForge.Imaging.Filters.Closing filter = new AForge.Imaging.Filters.Closing(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Erosion") { AForge.Imaging.Filters.Erosion filter = new AForge.Imaging.Filters.Erosion(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Dilatation") { AForge.Imaging.Filters.Dilatation filter = new AForge.Imaging.Filters.Dilatation(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Edges") { AForge.Imaging.Filters.Edges filter = new AForge.Imaging.Filters.Edges(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } }
public VideoProcessor() { background = null; pixelateFilter = new Pixellate(); pixelateFilter.PixelSize = 10; differenceFilter = new Difference(); thresholdFilter = new Threshold(15); grayscaleFilter = new Grayscale(0.2125, 0.7154, 0.0721); erosionFilter = new Erosion(); moveTowardsFilter = new MoveTowards(); filters1 = new FiltersSequence(); filters1.Add(pixelateFilter); filters1.Add(grayscaleFilter); filters2 = new FiltersSequence(); filters2.Add(differenceFilter); filters2.Add(thresholdFilter); filters2.Add(erosionFilter); rat1 = new Tracker(640 / 2, 480 / 2, Color.Red); rat2 = new Tracker(400, 300, Color.Green); counter = 0; }
public Closing(short[,] se) { this.errosion = new Erosion(); this.dilatation = new Dilatation(); this.errosion = new Erosion(se); this.dilatation = new Dilatation(se); }
public Bitmap process(Bitmap bmp) { Bitmap newImage = (Bitmap)bmp.Clone(); newImage = new AForge.Imaging.Filters.GrayscaleY().Apply(newImage); newImage = new AForge.Imaging.Filters.Threshold(50).Apply(newImage); newImage = new AForge.Imaging.Filters.Median().Apply(newImage); newImage = new AForge.Imaging.Filters.Median().Apply(newImage); newImage = new AForge.Imaging.Filters.Dilatation().Apply(newImage); newImage = new AForge.Imaging.Filters.Median().Apply(newImage); newImage = new AForge.Imaging.Filters.Erosion().Apply(newImage); newImage = new AForge.Imaging.Filters.Erosion().Apply(newImage); return(newImage); }
public double GetTemperature() { var temp = 0.0; var image = Image.FromFile(filename); var grayscale = new Grayscale(0.2125, 0.7154, 0.0721); image = grayscale.Apply(image); var invert = new Invert(); image = invert.Apply(image); var stats = new ImageStatistics(image); var levelsLinear = new LevelsLinear { InGray = stats.Gray.GetRange(2.90) }; image = levelsLinear.Apply(image); var contrast = new ContrastStretch(); image = contrast.Apply(image); var erosion = new Erosion(); image = erosion.Apply(image); var blur = new GaussianBlur(2, 3); image = blur.Apply(image); var threshold = new Threshold(79); image = threshold.Apply(image); image.Save(processedFileName, System.Drawing.Imaging.ImageFormat.Jpeg); image.Dispose(); var text = Recognise(); double.TryParse(text.Replace(',', '.'), out temp); return temp; }
public void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { // get new frame CheckForIllegalCrossThreadCalls = false; Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone(); if (pictureBox1.Image == null) { bitmap.Save(@"modelo0.jpg"); bgFrame = bitmap; } else { try { bgFrame = (Bitmap)pictureBox1.Image.Clone(); //bitmap.Save(@"currImage.jpg"); currentFrame = (Bitmap)bitmap.Clone(); Bitmap gcurrent = Grayscale.CommonAlgorithms.BT709.Apply(bitmap); Bitmap gbground = Grayscale.CommonAlgorithms.BT709.Apply(bgFrame); Difference differenceFilter = new Difference(); differenceFilter.OverlayImage = gbground; Bitmap currentImg = differenceFilter.Apply(gcurrent); //bloqueo temporal de current image BitmapData currentData = currentImg.LockBits(new Rectangle(0, 0, framesProcessing.fWidth, framesProcessing.fHeight), ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed); //**Thresholdfilter Threshold thresholdFilter = new Threshold(15); thresholdFilter.ApplyInPlace(currentData); IFilter erosionFilter = new Erosion(); Bitmap tmp2 = erosionFilter.Apply(currentData); currentImg.UnlockBits(currentData); i = framesProcessing.CalculateWhitePixels(tmp2); if (i > 300) { mov = mov2 = true; } else mov = false; pictureBox2.Image = currentImg; } catch{//MessageBox.Show(ex.Message.ToString()); } } pictureBox1.Image = bitmap; }
public static Bitmap Erosion(Bitmap bmp) { // create filter Erosion filter = new Erosion(); // apply the filter filter.Apply(bmp); return bmp; }
private void cBFilters_SelectedIndexChanged(object sender, EventArgs e) { Bitmap pictureTransform = (Bitmap)pbChoose.Image; if ((string)cBFilters.SelectedItem == "HSL_Filter") { AForge.Imaging.Filters.SaturationCorrection filter = new SaturationCorrection(0.1); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Mediana") { AForge.Imaging.Filters.Median filter = new Median(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } /*if ((string)cBFilters.SelectedItem == "Fourier_Transformation") * { * Complex[] dst = new Complex[n]; * * AForge.Math.FourierTransform filter = AForge.Math.FourierTransform.DFT();// .FromBitmap(pictureTransform); * Bitmap newImage = filter.Apply(); * pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; * pBNew.Image = newImage; * }*/ if ((string)cBFilters.SelectedItem == "Binarization") { pictureTransform = Grayscale.CommonAlgorithms.BT709.Apply(pictureTransform); Threshold threshold = new Threshold(127); threshold.ApplyInPlace(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = pictureTransform; } if ((string)cBFilters.SelectedItem == "Grayscale") { AForge.Imaging.Filters.Grayscale filter = new AForge.Imaging.Filters.Grayscale(0.2125, 0.7154, 0.0721); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "FillHoles") { pictureTransform = Grayscale.CommonAlgorithms.BT709.Apply(pictureTransform); Threshold threshold = new Threshold(127); threshold.ApplyInPlace(pictureTransform); AForge.Imaging.Filters.FillHoles filter = new AForge.Imaging.Filters.FillHoles(); filter.MaxHoleHeight = 5; filter.MaxHoleWidth = 15; filter.CoupledSizeFiltering = false; Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Opening") { AForge.Imaging.Filters.Opening filter = new AForge.Imaging.Filters.Opening(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Closing") { AForge.Imaging.Filters.Closing filter = new AForge.Imaging.Filters.Closing(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Erosion") { AForge.Imaging.Filters.Erosion filter = new AForge.Imaging.Filters.Erosion(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Dilatation") { AForge.Imaging.Filters.Dilatation filter = new AForge.Imaging.Filters.Dilatation(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } if ((string)cBFilters.SelectedItem == "Edges") { AForge.Imaging.Filters.Edges filter = new AForge.Imaging.Filters.Edges(); Bitmap newImage = filter.Apply(pictureTransform); pbChoose.SizeMode = PictureBoxSizeMode.CenterImage; pBNew.Image = newImage; } }
// 선 굵게, 24비트로 넣어줘야함 public static Bitmap thick(Bitmap source) { ///////////// ini 객체 생성 시작 ///////////////////////////////////////////////////// //현재 프로그램이 실행되고 있는정보 가져오기: 디버깅 모드라면 bin/debug/프로그램명.exe FileInfo exefileinfo = new FileInfo(@"C:\Program Files\PLOCR\PLOCR.exe"); string pathini = exefileinfo.Directory.FullName.ToString(); //프로그램 실행되고 있는데 path 가져오기 string fileName = @"\PLOCRconfig.ini"; // 환경설정 파일명 string filePath = pathini + fileName; //ini 파일 경로 PLOCR.IniUtil ini = new PLOCR.IniUtil(filePath); // 만들어 놓았던 iniUtil 객체 생성(생성자 인자로 파일경로 정보 넘겨줌) //////////// ini 객체 생성 끝 ///////////////////////////////////////////////////////// int order = int.Parse(ini.GetIniValue("선굵기값", "굵게횟수")); for (int i = 0; i < order; i++) { Bitmap tmp = (Bitmap)source; // 중요! 한번 이미지 처리가 끝난 비트맵 source 는 clone 함수로 보내기 전에 다시 한번 (Bitmap) 처리 해줘야함, 이유는 잘 모르겠음 // convert to 24 bits per pixel source = ImageProcess.Clone(tmp, PixelFormat.Format24bppRgb); // delete old image tmp.Dispose(); Erosion filter = new Erosion(); filter.ApplyInPlace(source); ; } return source; }
/// <summary> /// processes Frame for Motion Detection based on frame comparison /// </summary> /// <param name="frame"> /// Takes in 2 Bitmap parameters, currentFrame and backgroundFrame /// </param> /// <returns> /// frame in which motion is marked /// </returns> public Bitmap processFrame(params Bitmap[] frame) { Bitmap currentFrame = frame[0]; // create grayscale filter (BT709) Grayscale filter = new Grayscale(0.2125, 0.7154, 0.0721); Bitmap GScurrentFrame = filter.Apply(currentFrame); if (this.backgroundFrame == null) { this.backgroundFrame = (Bitmap)GScurrentFrame.Clone(); GScurrentFrame.Dispose(); return currentFrame; } else { Difference differenceFilter = new Difference(); IFilter thresholdFilter = new Threshold(15); // set backgroud frame as an overlay for difference filter differenceFilter.OverlayImage = backgroundFrame; Bitmap tmp = thresholdFilter.Apply(differenceFilter.Apply(GScurrentFrame)); //reduce noise IFilter erosionFilter = new Erosion(); Bitmap tmp1 = erosionFilter.Apply(tmp); tmp.Dispose(); // Highlight Motions IFilter extractChannel = new ExtractChannel(RGB.G); Bitmap redChannel = extractChannel.Apply(currentFrame); Merge mergeFilter = new Merge(); mergeFilter.OverlayImage = tmp1; Bitmap t3 = mergeFilter.Apply(redChannel); ReplaceChannel rc = new ReplaceChannel(RGB.G, t3); t3 = rc.Apply(currentFrame); this.backgroundFrame = (Bitmap)GScurrentFrame.Clone(); redChannel.Dispose(); tmp1.Dispose(); GScurrentFrame.Dispose(); return t3; } }
public Closing() { this.errosion = new Erosion(); this.dilatation = new Dilatation(); }
/// <summary> /// Initializes a new instance of the <see cref="Opening"/> class. /// </summary> /// /// <param name="se">Structuring element.</param> /// /// <remarks><para>See documentation to <see cref="Erosion"/> and <see cref="Dilatation"/> /// classes for information about structuring element constraints.</para></remarks> /// public Opening(short[,] se) { errosion = new Erosion(se); dilatation = new Dilatation(se); }
// 선 굵게 private void button34_Click(object sender, EventArgs e) { ///////////// ini 객체 생성 시작 ///////////////////////////////////////////////////// //현재 프로그램이 실행되고 있는정보 가져오기: 디버깅 모드라면 bin/debug/프로그램명.exe FileInfo exefileinfo = new FileInfo(@"C:\Program Files\PLOCR\PLOCR.exe"); string pathini = exefileinfo.Directory.FullName.ToString(); //프로그램 실행되고 있는데 path 가져오기 string fileName = @"\PLOCRconfig.ini"; // 환경설정 파일명 string filePath = pathini + fileName; //ini 파일 경로 DocumentAnalysis.IniUtil ini = new DocumentAnalysis.IniUtil(filePath); // 만들어 놓았던 iniUtil 객체 생성(생성자 인자로 파일경로 정보 넘겨줌) //////////// ini 객체 생성 끝 ///////////////////////////////////////////////////////// Bitmap source = Global.source; Bitmap tmp = source; // convert to 24 bits per pixel source = imageProcess.Clone(tmp, PixelFormat.Format24bppRgb); // delete old image tmp.Dispose(); Erosion filter = new Erosion(); filter.ApplyInPlace(source); Global.source = source; pictureBox1.Image = Global.source; pictureBox1.Refresh(); textBox24.Text = (int.Parse(textBox24.Text) + 1).ToString(); ini.SetIniValue("선굵기값", "굵게횟수", textBox24.Text.ToString()); //string path = calculator.CreateFileCheck("C:\\Program Files\\PLOCR\\prescription.png"); //pictureBox1.Image.Save(path); }
private Bitmap XXX(Bitmap bmpBefore, Bitmap bmpAfter) { var filter = new Grayscale(0.2125, 0.7154, 0.0721); bmpBefore = filter.Apply(bmpBefore); bmpAfter = filter.Apply(bmpAfter); // create filters var differenceFilter = new Difference(); IFilter thresholdFilter = new Threshold(15); // set backgroud frame as an overlay for difference filter differenceFilter.OverlayImage = bmpBefore; // apply the filters Bitmap tmp1 = differenceFilter.Apply(bmpAfter); Bitmap tmp2 = thresholdFilter.Apply(tmp1); IFilter erosionFilter = new Erosion(); // apply the filter Bitmap tmp3 = erosionFilter.Apply(tmp2); IFilter pixellateFilter = new Pixellate(); // apply the filter Bitmap tmp4 = pixellateFilter.Apply(tmp3); return tmp4; }
/// <summary> /// Initializes a new instance of the <see cref="Opening"/> class. /// </summary> /// /// <param name="se">Structuring element.</param> /// /// <remarks><para>See documentation to <see cref="Erosion"/> and <see cref="Dilatation"/> /// classes for information about structuring element constraints.</para></remarks> /// public Opening( short[,] se ) { errosion = new Erosion( se ); dilatation = new Dilatation( se ); }
public static Bitmap ApplyErosion(Bitmap pBitmap) { Erosion filter = new Erosion(); return filter.Apply(pBitmap); }
private void DetectMotion() { if ((_previousFrame != null) && (_currentFrame != null)) { Grayscale grayscaleFilter = new Grayscale(0.2125, 0.7154, 0.0721); using (Bitmap frame1GS = grayscaleFilter.Apply(_previousFrame)) { using (Bitmap frame2GS = grayscaleFilter.Apply(_currentFrame)) { Difference differenceFilter = new Difference(); IFilter thresholdFilter = new Threshold(15); // set backgroud frame as an overlay for difference filter differenceFilter.OverlayImage = (Bitmap)frame1GS; // apply the filters using (Bitmap tmp1 = differenceFilter.Apply((Bitmap)frame2GS)) { using (Bitmap tmp2 = thresholdFilter.Apply(tmp1)) { IFilter erosionFilter = new Erosion(); // apply the filter using (Bitmap tmp3 = erosionFilter.Apply(tmp2)) { int whitePixelsCount = CalculateWhitePixels(tmp3); if (whitePixelsCount > 1000) { MotionDetectionEvent motionEvent = new MotionDetectionEvent() { CameraDevice = _camera, NumberOfPixelsDetected = whitePixelsCount, InputDevice = _camera }; MotionDetectedEventArgs args = new MotionDetectedEventArgs(motionEvent); OnMotionDetected(args); } //// extract red channel from the original image //IFilter extrachChannel = new ExtractChannel(RGB.R); //Bitmap redChannel = extrachChannel.Apply(frame2); //// merge red channel with motion regions //Merge mergeFilter = new Merge(); //mergeFilter.OverlayImage = tmp3; //Bitmap tmp4 = mergeFilter.Apply(redChannel); //// replace red channel in the original image //ReplaceChannel replaceChannel = new ReplaceChannel(RGB.R, tmp4); //replaceChannel.ChannelImage = tmp4; //Bitmap tmp5 = replaceChannel.Apply(frame2); } } } } } } }