图像的点运算
所謂點運算,是指像素值(像素點的灰度值)通過運算之后,可以改善圖像的顯示效果。這是一種像素的逐點運算。
點運算又稱為“對比度增強”、“對比度拉伸”,“灰度變換”(體現了點運算在哪些方面改變圖片的顯示效果)。
?
一.線性點運算
1.1 說明
1.2 示例
以lenna圖像為例,點運算代碼如下:
close all; clear all; I = imread('lenna.jpg'); I1 = 1.5 * I; %增強對比度 I2 = 0.8 * I; %減弱對比度 I3 = -1 * int8(I) + int8(255); %黑白反轉 subplot(2, 2, 1), imshow(I), title('原始圖像') subplot(2, 2, 2), imshow(I1), title('對比度增強') subplot(2, 2, 3), imshow(I2), title('對比度減弱') subplot(2, 2, 4), imshow(I3), title('黑白反轉')處理后的圖像顯示如下:
?
?
二.非線性點運算
2.1 說明
非線性點運算對應于非線性映射函數,典型的映射包括平方函數,對數函數,截取(窗口函數),閾值函數,多值量化函數等。
2.2 示例
- 閾值化處理
閾值化處理是最常用的一種非線性運算,它的功能是選擇一閾值,將圖像二值化,用于圖像分割及邊緣跟蹤等處理。
代碼如下:
close all; clear all; I = imread('lenna.jpg'); T = mean2(I); %設定初始閾值 done = false; while ~doneG = I > T;Tnext = 0.5 * (mean(I(G)) + mean(I(~G)));done = abs(T - Tnext) < 0.5;T = Tnext; end G = im2bw(I, T/255); %根據確定的閾值進行圖像二值分割 subplot(1, 2, 1), imshow(I), title('原始圖像'); subplot(1, 2, 2), imshow(G), title('二值圖像');?處理后的圖像顯示如下:
- 直方圖均衡化
如果一副圖像的像素占有很多的灰度級而且分布均勻,那么這樣的圖像往往有高對比度和多變的灰度色調。
代碼如下:
clear all; close all; I = imread('lenna.jpg'); subplot(2, 2, 1), imshow(I), title('原始圖像'); subplot(2, 2, 2), imhist(I); G = histeq(I); % 灰度直方圖的均衡化 subplot(2, 2, 3), imshow(G), title('直方圖均衡化后圖像'); subplot(2, 2, 4), imhist(G);?處理后的圖像顯示如下:
?histeq的實現代碼如下:
clear all; close all; I = imread('lenna.jpg'); I = im2double(I); [M, N] = size(I); [counts, x] = imhist(I); % counts:灰度值的個數,x:灰度值 location = find(counts ~= 0); % 找到所有像素個數不為0的灰度級位置 minCDF = min(counts(location)); % 找到像素數最少的灰度級 for i = 1 : length(location)CDF = sum(counts(location(1 : i))); % 計算各個灰度級像素的累計分布P = find(I == x(location(i))); % 找到灰度級所在位置I(P) =(CDF - minCDF) / (M * N - minCDF); % 灰度變換公式 end數學推導查看
轉載于:https://www.cnblogs.com/minisculestep/p/4851897.html
總結
- 上一篇: zabbix应用之短信报警
- 下一篇: JQuery 判断checkbox是否选