Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Giải thuật về tăng/giảm độ tương phản của ảnh như thế nào?

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    2

    Question Giải thuật về tăng/giảm độ tương phản của ảnh như thế nào?

    mình có đang làm 1 bài tập tương tác lên ảnh, trong đó có 1 yêu cầu là tăng/giảm độ tương phản (contrast) của ảnh. cái yêu cầu này mình tìm mãi mà ko ra giải thuật. bạn nào biết giúp hộ mình với.
    thanks trc ^^!

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Cái file đính kèm có giải thuật chi tiết về việc này, kèm theo rất nhiều hình ảnh mô tả.

    Code thực hiện trên C++ như sau:

    C++ Code:
    1. void autoAdjustContrast(char fileName[]) // makes picture brighter by amping contract
    2. {
    3.     int maxInt = 0;
    4.     int apmlifier = 0;
    5.  
    6.     BMP bmpImage;
    7.     bmpImage.ReadFromFile(fileName);
    8.  
    9.     for(int x = 0; x < bmpImage.TellWidth(); x++)
    10.     {
    11.         for(int y = 0; y < bmpImage.TellHeight(); y++)
    12.         {
    13.             maxInt = max(static_cast<int>(bmpImage(x, y)->Red), maxInt);
    14.             maxInt = max(static_cast<int>(bmpImage(x, y)->Green), maxInt);
    15.             maxInt = max(static_cast<int>(bmpImage(x, y)->Blue), maxInt);
    16.         }
    17.     }
    18.  
    19.     apmlifier = 255 / maxInt;
    20.     for(int x = 0; x < bmpImage.TellWidth(); x++)
    21.     {
    22.         for(int y = 0; y < bmpImage.TellHeight(); y++)
    23.         {
    24.             bmpImage(x, y)->Red = bmpImage(x, y)->Red * apmlifier;
    25.             bmpImage(x, y)->Green = bmpImage(x, y)->Green * apmlifier;
    26.             bmpImage(x, y)->Blue = bmpImage(x, y)->Blue * apmlifier;
    27.         }
    28.     }
    29.  
    30.     bmpImage.WriteToFile(fileName);
    31. }

    Còn code thực hiện trên C# như sau:
    Visual C# Code:
    1. /// <summary>
    2. /// Adjusts the Contrast
    3. /// </summary>
    4. /// <param name="OriginalImage">Image to change</param>
    5. /// <param name="Value">Used to set the contrast (-100 to 100)</param>
    6. /// <returns>A bitmap object</returns>
    7.  
    8. public static Bitmap AdjustContrast(Bitmap OriginalImage, float Value)
    9. {
    10.     Bitmap NewBitmap = new Bitmap(OriginalImage.Width, OriginalImage.Height);
    11.    BitmapData NewData = Image.LockImage(NewBitmap);
    12.    BitmapData OldData = Image.LockImage(OriginalImage);
    13.    int NewPixelSize = Image.GetPixelSize(NewData);
    14.    int OldPixelSize = Image.GetPixelSize(OldData);
    15.    Value = (100.0f + Value) / 100.0f;
    16.    Value *= Value;
    17.  
    18.    for (int x = 0; x < NewBitmap.Width; ++x)
    19.    {
    20.        for (int y = 0; y < NewBitmap.Height; ++y)
    21.        {
    22.            Color Pixel = Image.GetPixel(OldData, x, y, OldPixelSize);
    23.            float Red = Pixel.R / 255.0f;
    24.            float Green = Pixel.G / 255.0f;
    25.            float Blue = Pixel.B / 255.0f;
    26.            Red = (((Red - 0.5f) * Value) + 0.5f) * 255.0f;
    27.            Green = (((Green - 0.5f) * Value) + 0.5f) * 255.0f;
    28.            Blue = (((Blue - 0.5f) * Value) + 0.5f) * 255.0f;
    29.            Image.SetPixel(NewData, x, y,
    30.                Color.FromArgb(MathHelper.Clamp((int)Red, 255, 0),
    31.                MathHelper.Clamp((int)Green, 255, 0),
    32.                MathHelper.Clamp((int)Blue, 255, 0)),
    33.                NewPixelSize);
    34.        }
    35.    }
    36.    Image.UnlockImage(NewBitmap, NewData);
    37.    Image.UnlockImage(OriginalImage, OldData);
    38.    return NewBitmap;
    39. }
    Attached Files Attached Files
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    08 2011
    Bài viết
    2

    chưa thấy nút thanks
    tạm thời thanks vầy
    thanks

    Trước khi hỏi mình cũng đã làm theo giải thuật trên nhưng có 1 vấn đề khi làm theo phương pháp trên là khi tăng lên 1 mức nào đó rồi giảm đúng 1 mức đó thì ảnh nó ko trả lại mức tương phản ban đầu.

    Mạn phép hỏi thêm có giải thuật nào khác ko???

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    3

    Anh ơi em định dùng một cái slider để kéo tăng giảm contrast, nhưng khi kéo slider về vị trí giữa( vị trí 0 ban đầu, kéo về trái giảm dần contrast, kéo về phải tăng dần contrast ) thì màu ảnh không trở lại như cũ nữa ( như lúc mới mở ảnh ra ấy). anh có thể giúp em được không :(

Các đề tài tương tự

  1. Thuế Thu nhập cá nhân: Tăng mức giảm trừ gia cảnh
    Gửi bởi alalbala1 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-11-2013, 08:43 PM
  2. Giải thuật xóa các phần tử trong mảng [Thảo luận]
    Gửi bởi trungkien45 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 16
    Bài viết cuối: 04-03-2013, 03:08 PM
  3. Thuật toán chuyển dãy tăng giảm thành dãy tăng?
    Gửi bởi anhtran trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 5
    Bài viết cuối: 12-03-2012, 07:40 AM
  4. Xin thuật toán sắp xếp ma trận tăng(giảm) không dùng mảng phụ.
    Gửi bởi PTL_PTL2008 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 22-03-2011, 08:11 PM
  5. Tăng và giảm bằng 2 phím | Thuật toán tăng và giảm khi đếm số thứ tự từ 00 đến 99?
    Gửi bởi guitar_flamenco trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 09-05-2009, 05:59 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn