Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1645108
  • 博文数量: 245
  • 博客积分: 10378
  • 博客等级: 上将
  • 技术积分: 2571
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 08:19
文章分类

全部博文(245)

文章存档

2013年(4)

2012年(8)

2011年(13)

2010年(68)

2009年(152)

分类:

2010-07-09 23:47:13

 很简单的图像处理程序,读取灰度图像,然后对该图像做灰度拓展,拓展到整个灰度级。
 
利用matlab实现。
思路:
  读取灰度数据,然后找到该灰度数据中的最大值、最小值,从而获取灰度拓展的函数关系。也就是获取直线方程,比如最大值为max,最小值为min,则有直线两点(min,0)、(max,255);有y=k*x+b;
有几何知识获取该直线方程,获取直线参数k b, 利用该直线方程,即完成拓展

% gray average
syms min_gray max_gray k b ;
double tmp;
b=-10;
min_gray=255;
max_gray=0;
img=imread('c:\gray.jpg');
img_size=size(img);
img_gray=zeros( size(img) ,'uint8');
%img_hist=zeros( size(img) ,'uint8');
%img_gray_hist=zeros( size(img) ,'uint8');
for i=1:img_size(1)
    for j=1:img_size(2)
        if img(i,j)>max_gray
            max_gray=img(i,j);
        end
        
        if img(i,j)<min_gray
            min_gray=img(i,j);
        end
            
    end
end

k=double( (255-0)/( double(max_gray)- double(min_gray) ) ); % 计算直线斜率
b=-1*(k* double(min_gray) ); %计算截距
%k=2.1;
for i=1:img_size(1)
    for j=1:img_size(2)
      % img_gray(i,j)=uint8( 5.3125.*img(i,j)-478.13 );
      tmp=double( img(i,j) );
      img_gray(i,j)=uint8(k*tmp+b); % 灰度平均化
    end
end

img_hist=imhist(img);
img_gray_hist=imhist(img_gray);


figure;
subplot(221);
imshow(img);
subplot(222);
imhist(img);
%imshow(img_hist);
subplot(223);
imshow(img_gray);
subplot(224);
imhist(img_gray);
%imshow(img_gray_hist);

收获:

  1,进一步熟悉matlab m语言的使用。

     for循环、if语句、不同变量

     要注意MATLAB中数据溢出的问题,

    比如在本例中,图像数据读入的是uint8类型数据,与k( double)相乘时,既然一直是0,考虑是因为k为double类型,k*图像数据可能超过255而导致数据溢出,解决方法是设置中间变量,然后强制将图像数据赋值给临时变量,在计算。

  2,验证数字图像处理相关知识。

  3,没有什么新的发现,就是熟悉加验证。


 

阅读(1870) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~