首页 > 其他 > 详细

点运算

时间:2015-10-06 20:48:57      阅读:344      评论:0      收藏:0      [点我收藏+]

所谓点运算,是指像素值(像素点的灰度值)通过运算之后,可以改善图像的显示效果。这是一种像素的逐点运算。

点运算又称为“对比度增强”、“对比度拉伸”,“灰度变换”(体现了点运算在哪些方面改变图片的显示效果)。

 

一.线性点运算

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 ~done
   G = 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

点运算

原文:http://www.cnblogs.com/minisculestep/p/4851897.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!