Ads by Google
¿·¤·¤¤µ»ö¤ò½ñ¤¯»ö¤Ç¹¹ð¤¬¾Ã¤»¤Þ¤¹¡£
Category : ¥¹¥Ý¥ó¥µ¡¼¹¹ð
| ¢¤
¥é¥×¥é¥·¥¢¥ó¥Õ¥£¥ë¥¿¡¼
²èÁü¾å¤Çµ±ÅÙ¤¬µÞ·ã¤ËÊѲ½¤¹¤ë¤È¤³¤í¤ò¥¨¥Ã¥¸¤È¤¤¤¤¤Þ¤¹¡£¥¨¥Ã¥¸¤ò¸¡½Ð¤¹¤ë¤³¤È¤Ç¡¢ÎسԤΤߤÎÀþ²èÁü¤òºî¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£¥¨¥Ã¥¸¸¡½Ð¤Î¼êË¡¤Ï¡¢¤«¤Ê¤ê¤¿¤¯¤µ¤ó¤¢¤ê¤Þ¤¹¤¬¡¢¤½¤ÎÃæ¤Ç¤â£²¼¡Èùʬ¤Ç´Ë¤ä¤«¤ÊÇ»ÅÙ¸ûÇۤǤ⸡½Ð¤Ç¤¤ë²èÁü½èÍýÊýË¡¡Ö¥é¥×¥é¥·¥¢¥ó¥Õ¥£¥ë¥¿¡¼¡×¤òC#¥×¥í¥°¥é¥à¤È¤È¤â¤Ë¾Ò²ð¤·¤Þ¤¹¡£
¥é¥×¥é¥·¥¢¥ó¥Õ¥£¥ë¥¿¡¼¤Î¥Þ¥¹¥¯¤Ï¡¢¼¡¤Î¤è¤¦¤Ê¤â¤Î»È¤¤¤Þ¤¹¡£
0 1 0
1 -4 1
0 1 0
¤Þ¤¿¤Ï
1 1 1
1 -8 1
1 1 1
¤³¤Î¤è¤¦¤Ê²èÁü¤Ï¡¢

¥Õ¥£¥ë¥¿¤¹¤ë¤È¤³¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

[2009/2/8Äɵ]
¤ª³¨¤«¤¥Ä¡¼¥ë¤Ë¡¢¥é¥×¥é¥·¥¢¥ó¥Õ¥£¥ë¥¿¤òÆþ¤ì¤Æ¤ß¤Þ¤·¤¿¡£
¶½Ì£¤¢¤ëÊý¤Ï¤ª³¨¤«¤¤ÎÊý¤â¤¼¤Ò¡ª
¤¨¤Î¤°¤Ò¤í¤Ð [http://www.enoguhiroba.net/]
C#²èÁü½èÍý¥×¥í¥°¥é¥à¤Ç¤¹¡£
// ²èÁü¤Î¥¨¥Ã¥¸¸¡½Ð // 3x3¥é¥×¥é¥·¥¢¥ó¥Õ¥£¥ë¥¿¤ò»ÈÍѤ¹¤ë¡£ // 0 1 0 // 1 -4 1 // 0 1 0 // LoadByteImage():bmp¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ó¤ÇÇÛÎó¤Ë³ÊǼ¤¹¤ë¥á¥½¥Ã¥É // SaveByteImage():byteÇÛÎó¤òbmp¤ËÊݸ¤¹¤ë¥á¥½¥Ã¥É // ImageProcessingForMask():¥Õ¥£¥ë¥¿¤ò¤«¤±¤ë¥á¥½¥Ã¥É using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; namespace LaplacianFilter { class Program { static void Main(string[] args) { // ²èÁüÆÉ¤ß¹þ¤ß byte[,] data = LoadByteImage("test.bmp"); // ¥Õ¥£¥ë¥¿¥Þ¥¹¥¯ const int maskSize = 3; double[,] mask = new double[maskSize, maskSize]{ {0,1,0}, {1,-4,1}, {0,1,0}} ; // ¥Õ¥£¥ë¥¿½èÍý byte[,] filterdata = ImageProcessingForMask(data, mask); // ²èÁüÊݸ SaveByteImage(filterdata, "out.bmp"); } /// <summary> /// ¥Þ¥¹¥¯¤Ë±þ¤¸¤¿²èÁü½èÍý¼Â¹Ô /// </summary> static byte[,] ImageProcessingForMask(byte[,] inputdata, double[,] mask) { try { // ½Ä²£¥µ¥¤¥º¤òÇÛÎ󤫤éÆÉ¤ß¼è¤ê int xsize = inputdata.GetLength(0); int ysize = inputdata.GetLength(1); // ¥Þ¥¹¥¯¥µ¥¤¥ºÆÉ¤ß¼è¤ê int masksize = mask.GetLength(0); // ²èÁü½èÍý¸å¤Î2¼¡¸µÇÛÎó byte[,] filterdata = new byte[xsize, ysize]; // ²èÁü½èÍý for (int i = 0; i < ysize; i++) { for (int j = 0; j < xsize; j++) { double sum = 0; for (int k = -masksize / 2; k <= masksize / 2; k++) { for (int n = -masksize / 2; n <= masksize / 2; n++) { if (j + n >= 0 && j + n < xsize && i + k >= 0 && i + k < ysize) { sum += inputdata[j + n, i + k] * mask[n + masksize / 2, k + masksize / 2]; } } } filterdata[j, i] = ConvertBytetoInt(sum); } } return filterdata; } catch { Console.WriteLine("¥Õ¥£¥ë¥¿½èÍý¤¬¼Â¹Ô¤Ç¤¤Þ¤»¤ó¡£"); return null; } } /// <summary> /// double·¿¤òbyte·¿¤ØÊÑ´¹ /// </summary> static byte ConvertBytetoInt(double num) { // num¤¬256°Ê¾å¤Ê¤é255¡¢0̤Ëþ¤Ê¤é0 if (num > 255.0) { return 255; } else if (num < 0) { return 0; } else { return (byte)num; } } /// <summary> /// Bitmap¤ò¥í¡¼¥É¤·byte[,]ÇÛÎó¤ÇÊÖ¤¹ /// </summary> static byte[,] LoadByteImage(string filename) { try { Bitmap bitmap = new Bitmap(filename); byte[,] data = new byte[bitmap.Width, bitmap.Height]; // bitmap¥¯¥é¥¹¤Î²èÁü¥Ô¥¯¥»¥ëÃͤòÇÛÎó¤ËÁÞÆþ for (int i = 0; i < bitmap.Height; i++) { for (int j = 0; j < bitmap.Width; j++) { // ¤³¤³¤Ç¤Ï¥°¥ì¥¤¥¹¥±¡¼¥ë¤ËÊÑ´¹¤·¤Æ³ÊǼ data[j, i] = (byte)( (bitmap.GetPixel(j, i).R + bitmap.GetPixel(j, i).B + bitmap.GetPixel(j, i).G) / 3 ); } } return data; } catch { Console.WriteLine("¥Õ¥¡¥¤¥ë¤¬ÆÉ¤á¤Þ¤»¤ó¡£"); return null; } } /// <summary> /// ²èÁüÇÛÎó¤òbmp¤Ë½ñ¤½Ð¤¹ /// </summary> static void SaveByteImage(byte[,] data, string filename) { try { // ½Ä²£¥µ¥¤¥º¤òÇÛÎ󤫤éÆÉ¤ß¼è¤ê int xsize = data.GetLength(0); int ysize = data.GetLength(1); Bitmap bitmap = new Bitmap(xsize, ysize); // bitmap¥¯¥é¥¹¤ÎSetPixel¤Çbitmap¥ª¥Ö¥¸¥§¥¯¥È¤Ë // ¥Ô¥¯¥»¥ëÃͤò¥»¥Ã¥È for (int i = 0; i < ysize; i++) { for (int j = 0; j < xsize; j++) { bitmap.SetPixel( j, i, Color.FromArgb( data[j, i], data[j, i], data[j, i]) ); } } // ²èÁü¤ÎÊݸ bitmap.Save(filename, ImageFormat.Bmp); } catch { Console.WriteLine("¥Õ¥¡¥¤¥ë¤¬½ñ¤¹þ¤á¤Þ¤»¤ó¡£"); } } } }¤³¤Î¥Þ¥¹¥¯¤ò¤«¤±¤ë¤È²¿¤Ç¥¨¥Ã¥¸¸¡½Ð¤Ç¤¤ë¤Î¤«¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡ª
http://csharpimage.me.land.to/LaplacianFilter.zip
Visual Studio 2008 C#¤ÇºîÀ®¤·¤¿¥½¡¼¥¹¥³¡¼¥É¤òÃÖ¤¤¤Æ¤ª¤¤Þ¤¹¡£
COMMENT
Comment Form
TRACKBACK
TrackBack List
| HOME |



Çã¤Ã¤ÆÎɤ«¤Ã¤¿
GUI¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î½¬ÆÀ¤ÏÊ̤ÎËܤÇ






