【數字圖像處理之(四)】用圖像增強談灰度直方圖

灰度直方圖

是灰度級的函數,描述的是圖像中該灰度級的像個數或該灰度級像素出現的頻率(歸一化)


  • 生成並繪製直方圖:
  1. src = imread('Fig0303(a)(breast).tif');  
  2. imshow(src);  
  3. h1 = imhist(src);                      %生成直方圖  
  4. figure,imhist(src,255);             %繪製直方圖  
  5.   
  6. h2 = imhist(src, 25);                 %生成直方圖  
  7. horz = linspace(0, 255, 25);  
  8. figure,bar(horz, h2);                 %繪製條狀直方圖  
  9. axis([0 255 0 60000]);               %設置座標軸最大最小值  
  10. set(gca, 'xtick', 0:50:250);          %設置座標軸的標尺  
  11. set(gca, 'ytick', 0:20000:60000);  
  12. xlabel('灰度級', 'fontsize', 10);  %座標軸附加圖像  
  13. ylabel('灰度值', 'fontsize', 10);  
  14. text(150, 40000, '條形直方圖', 'fontsize',15);  
  15.   
  16. h3 = imhist(src, 25);                 %生成直方圖  
  17. horz = linspace(0, 255, 25);  
  18. figure,stem(horz, h3, 'fill');      %繪製桿狀直方圖  
  19. axis([0 255 0 60000]);               %設置座標軸最大最小值  
  20. set(gca, 'xtick', 0:50:250);         %設置座標軸的標尺  
  21. set(gca, 'ytick', 0:20000:60000);  
  22. xlabel('灰度級', 'fontsize', 10); %座標軸附加圖像  
  23. ylabel('灰度值', 'fontsize', 10);  
  24. text(150, 40000, '桿狀直方圖', 'fontsize',15);  
  25.   
  26. h4 = imhist(src);                       %生成直方圖  
  27. figure,plot(h4);                         %繪連續直方圖  
  28. xlim('auto');                              %自動設置座標軸範圍和標尺  
  29. ylim('auto');  
  30. text(150, 40000, '連續直方圖', 'fontsize',15);  
save_snippets.png
src = imread('Fig0303(a)(breast).tif');
imshow(src);
h1 = imhist(src);                      %生成直方圖
figure,imhist(src,255);             %繪製直方圖

h2 = imhist(src, 25);                 %生成直方圖
horz = linspace(0, 255, 25);
figure,bar(horz, h2);                 %繪製條狀直方圖
axis([0 255 0 60000]);               %設置座標軸最大最小值
set(gca, 'xtick', 0:50:250);          %設置座標軸的標尺
set(gca, 'ytick', 0:20000:60000);
xlabel('灰度級', 'fontsize', 10);  %座標軸附加圖像
ylabel('灰度值', 'fontsize', 10);
text(150, 40000, '條形直方圖', 'fontsize',15);

h3 = imhist(src, 25);                 %生成直方圖
horz = linspace(0, 255, 25);
figure,stem(horz, h3, 'fill');      %繪製桿狀直方圖
axis([0 255 0 60000]);               %設置座標軸最大最小值
set(gca, 'xtick', 0:50:250);         %設置座標軸的標尺
set(gca, 'ytick', 0:20000:60000);
xlabel('灰度級', 'fontsize', 10); %座標軸附加圖像
ylabel('灰度值', 'fontsize', 10);
text(150, 40000, '桿狀直方圖', 'fontsize',15);

h4 = imhist(src);                       %生成直方圖
figure,plot(h4);                         %繪連續直方圖
xlim('auto');                              %自動設置座標軸範圍和標尺
ylim('auto');
text(150, 40000, '連續直方圖', 'fontsize',15);


 
  • 直方圖均衡化(可使圖像的灰度間距拉開或使灰度分佈均勻):
  1. src = imread('Fig0303(a)(breast).tif');  
  2. result = histeq(src);    %均衡化  
  3. imshow(result);  
save_snippets.png
src = imread('Fig0303(a)(breast).tif');
result = histeq(src);    %均衡化
imshow(result);






  • 自適應直方圖均衡化:
  1. src = imread('Fig0303(a)(breast).tif');  
  2. result = adapthisteq(src);%自適應直方圖均衡化  
  3. figure, imshow(src);  
  4. figure, imhist(src);  
  5. figure, imshow(result);  
  6. figure, imhist(result);  
save_snippets.png
src = imread('Fig0303(a)(breast).tif');
result = adapthisteq(src);%自適應直方圖均衡化
figure, imshow(src);
figure, imhist(src);
figure, imshow(result);
figure, imhist(result);



  • MATLAB函數小結:
imhist( ):該函數用於獲取圖像數據直方圖。(PS:若沒有賦值給左邊的變量,該函數將顯示一張灰度直方圖)
h1 = imhist( src, n )
src--輸入圖像
n   --灰度級別,默認爲256

linspace(a, b, n):該函數生成一個(1xn)數組,數據的第一個元素值爲a,最後一個元素爲b,n是總採樣點數。(PS:所有元素的值均勻分佈)

bar(horz, h2):繪製條狀直方圖,通過horz控制直方圖顯示的密集程度                 
horz -- 一個(1xn)數組(跟h2同階)
h2    -- 要繪製的直方圖

stem(horz, h3, 'fill'):繪製桿狀直方圖
horz -- 一個(1xn)數組(跟h2同階)
h2    -- 要繪製的直方圖
'fill'  -- 杆頭是否空心

plot(h4):繪連續直方圖


result = histeq(src);    %獲取直方圖均衡化後的圖像

result = adapthisteq(src);      %獲取直方圖自適應均衡化後的圖像



發佈了10 篇原創文章 · 獲贊 94 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章