很简单的图像处理程序,读取灰度图像,然后对该图像做灰度拓展,拓展到整个灰度级。
利用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,没有什么新的发现,就是熟悉加验证。
阅读(1879) | 评论(0) | 转发(0) |