- Histogram hay lược đồ mức xám là đồ thị thể hiện mối quan hệ giữa mức xám và các điểm ảnh có chung mức xám, thể hiện tần suất xuất hiện mỗi mức xám trong ảnh.
Trang 1Bài Thảo Luận
Môn: Xử lý ảnh
Đề tài: Lược đồ histogram Ứng dụng hiệu chỉnh ảnh
GVHD: Cao Ngọc Ánh Lớp: ĐH Tin4a1
Trang 31.2 một số ví dụ
- Histogram tốt có hình ngọn núi với độ cao tăng dần từ trái, cao
nhất ở giữa và thấp nhất ở bên phải Điều đó chứng tỏ số lượng điểm ảnh nhiều nhất là ở độ sáng trung bình
Trang 4- Ảnh bị quá tối: histogram bị nghiêng về bên trái, có một cái cột gần như thẳng đứng sát trái
- Ảnh bị quá sáng: histogram bị nghiêng về bên phải, có một cái cột gần như thẳng đứng sát phải
Trang 5- Ảnh bị quá tương phản: có hai cái cột nằm ở 2 đầu trái phải
- Ảnh bị kém tương phản: dải màu bị dồn vào giữa, hai đầu không có gì
Trang 62 Các phép biến đổi trên lược đồ xám và ứng dụng.
2.1 Hiển thị lược đồ xám của ảnh
Theo định nghĩa của lược đồ xám, thuật toán xây dựng lược đồ xám có thể mô tả như sau:Giải thuật:
Bắt đầu
H là bảng chứa lược đồ xám (là vec tơ có N phần tử)
Bước 1: Khởi tạo bảng
Đặt tất cả các phần tử của bảng là 0 Bước 2: Tạo bảng
Với mỗi điểm ảnh I(x,y) tính H[I(x,y)] = H[I(x,y)] + 1
Bước 3: Tính giá trị Max của bảng H Sau đó hiện bảng trong khoảng từ 0 đến Max.Kết thúc
Trang 8- Ví dụ về hiển thị Lược đồ xám của ảnh.
Lược đồ xám là một công cụ hữu hiệu dùng trong nhiều công đoạn của xử lý ảnh như tăng cường ảnh
Trang 92.2 Các phép biến đổi trên histogram.
- Tổ chức đồ là một đặt trưng quan trọng của ảnh, dựa vào lược đồ chúng ta có thể nhận dạng sơ về ảnh, có kết luận cơ bản về ảnh: ảnh sáng, tối, độ tương phản thấp, cao… Với lý do đó, chúng ta có một số phép xử lý cơ bản sau:
+ Trượt histogram
+ Căng biểu đồ
+ Sửa chữa tổ chức đồ (kết hợp giữa căng và trượt)
+ Cân bằng (san bằng) biểu đồ
- Sau đây chúng ta sẽ đi vào các hiệu chỉnh ảnh với các phép xử lý trên histogram
Trang 102.2.1 Trượt histogram.
- Mục đích: Mục đích: làm tăng hoặc giảm cường độ xám của ảnh
- Ý tưởng:
O(x,y) = I(x,y) + n
+ n < 0 : trượt ảnh về bên trái => ảnh tối hơn
+ n > 0 : trượt ảnh về bên phải => ảnh sáng hơn
Chú ý: Kết quả của O(x,y) có thể > 255 hoặc < 0 vì vậy cần chú ý để set lại 2 giá trị này
Trang 11for (y = 0; y < bitmap.Height - 1; y++)
Trang 12- Sau đây là hình ảnh so sánh giữa trước và sau khi trượt với các hệ số 80 và -30
Histogram tương
ứng
Trang 13ảnh trước khi trượt
ảnh sau khi trượt với hệ số -30
Histogram tương
ứng
Trang 142.2.2 Phép căng tổ chức đồ.
Mục đích: làm thay đổi độ tương phản của ảnh
Ý tưởng: Thông thường trong một số ảnh,các giá trị xám không phủ đều toàn bộ dải xám sẵn có mà chỉ tập chung vào một khoảng nhất định,điều này làm ảnh bị sáng quá, tối quá, hoặc độ tương phản kém.Vì vậy giải pháp được đưa ra là kéo dãn dải xám ra mức lớn nhất có thể
O(x,y) = I(x,y) * n (với n > 0)
+ n > 1 : mở rộng chân tổ chức đồ
=> tăng độ tương phản của ảnh
Trang 15c = bitmap.GetPixel(x, y);
Trang 17
So sánh giữa trước và sau khi co dãn
Histogram tương
ứng
Trang 182.2.3 Sửa chữa tổ chức đồ.
Mục đích: nhằm có một tổ chức đồ tối ưu
=> nâng cao chất lượng ảnh
Ý tưởng:
+ Kết hợp giữa trượt và căng tổ chức đồ
+ Trượt tổ chức đồ về bên trái sao cho mức xám nhỏ nhất.+ Căng tổ chức đồ sao cho mức xám lớn nhất (có giá trị).O(x,y) = I(x,y) * 255 / max(h())
Trang 19} return 0;
} private Byte HistogramRight(int [] h) {
for(int i = h.Length - 1;i>0;i ) {
if (h[i]!=0) return (byte)i;
} return 0;
} return 0;
} private Byte HistogramRight(int [] h) {
for(int i = h.Length - 1;i>0;i ) {
if (h[i]!=0) return (byte)i;
} return 0;
}
Trang 20private Bitmap Suachua_Histogram(Bitmap bm)
{
Bitmap bitmap = new Bitmap(bm);
//Tinh h(x)
int[]hL = new int[256];
int[]hR = new int[256];
GetH(bitmap, hL);
//Tim Trai & truot trai
int left = HistogramLeft(hL);
bitmap = new Bitmap(Truot_HisToGram(bm,
left));
//Tinh tien ve 0 va copy hL qua hR
Array.Copy(hL, left, hR, 0, hL.Length - left);
private Bitmap Suachua_Histogram(Bitmap bm)
{
Bitmap bitmap = new Bitmap(bm);
//Tinh h(x)
int[]hL = new int[256];
int[]hR = new int[256];
GetH(bitmap, hL);
//Tim Trai & truot trai
int left = HistogramLeft(hL);
bitmap = new Bitmap(Truot_HisToGram(bm,
left));
//Tinh tien ve 0 va copy hL qua hR
Array.Copy(hL, left, hR, 0, hL.Length - left);
int x, y;
Byte c;
Byte max = HistogramRight(hR);
for (y = 0; y < bitmap.Height - 1; y++) {
for (x = 0; x < bitmap.Width - 1; x++) {
c = bitmap.GetPixel(x, y).R;
c = (byte)((c * 255)/max);
bitmap.SetPixel(x, y, Color.FromArgb(c, c, c));
} } return bitmap;
}
int x, y;
Byte c;
Byte max = HistogramRight(hR);
for (y = 0; y < bitmap.Height - 1; y++) {
for (x = 0; x < bitmap.Width - 1; x++) {
c = bitmap.GetPixel(x, y).R;
c = (byte)((c * 255)/max);
bitmap.SetPixel(x, y, Color.FromArgb(c, c, c));
} } return bitmap;
}
Trang 21- Sau đây là hình ảnh so sánh giữa trước và sau khi sửa chữa với ảnh xám trượt -30 trước đó.
Histogram tương
ứng
Trang 222.2.4 Cân bằng lược đồ.
Mục đích: Với một ảnh tự nhiên, phần lớn các điểm ảnh có giá trị thấp hơn độ sáng trung bình Trong miền tối ta khó có thể cảm nhận được các chi tiết của ảnh Cho nên ta cần khắc phục nhược điểm này bằng cách biến đổi lược đồ xám Thường biến đổi sao cho tiến gần đến lược đồ định trước, có thể nói phổ biến nhất là san bằng lược đồ
Thuật toán cân bằng:
Với ảnh đầu vào I(m*n):
Bước 1: tính tổ chức đồ của ảnh
Bước 2: tính tỷ lệ xuất hiện của mức xám h[i] trên ảnh (h[i]/(m*n))
Bước 3: tính mật độ xác suất của các mức xám h[i]
( hc[i] = h[0] +…+ h[i] = hc[i-1] + h[i])
Trang 23Bước 4: San bằng mức xám và gắn các mức xám mới cho điểm ảnh đầu ra: (Eq[i] = round(255*hc[i])).
// Mat do xac suat
int[] tg = new int[256];
// Mat do xac suat
int[] tg = new int[256];
Trang 24float tb = (float)bm.Width * bm.Height;
// tinh f(g) max (0,round( t(g)*255/( tb-1) )
int[] fg = new int[256];
for (int i = 0; i < 256; i++)
Color c = bm.GetPixel(x, y);
int red = (int)c.R;
float tb = (float)bm.Width * bm.Height;
// tinh f(g) max (0,round( t(g)*255/( tb-1) )
int[] fg = new int[256];
for (int i = 0; i < 256; i++)
Color c = bm.GetPixel(x, y);
int red = (int)c.R;
Trang 26hc(1) = 4/25 hc(5) = 12/25 hc(13) = 24/25hc(2) = 7/25 hc(6) = 16/25 hc(14) = 25/25hc(3) = 8/25 hc(7) = 22/25
Trang 27- Sau đây là hình ảnh so sánh giữa trước và sau khi cân bằng
Histogram tương
ứng
Trang 282 Một số hình ảnh của chương trình.