索引转灰度
- 格式:doc
- 大小:26.50 KB
- 文档页数:2


数字图像处理技术一.数字图像处理概述数字图像处理是指人们为了获得一定的预期结果和相关数据利用计算机处理系统对获得的数字图像进展一系列有目的性的技术操作。
数字图像处理技术最早出现在上个世纪中期,伴随着计算机的开展,数字图像处理技术也慢慢地开展起来。
数字图像处理首次获得成功的应用是在航空航天领域,即1964年使用计算机对几千月球照片使用了图像处理技术,并成功的绘制了月球外表地图,取得了数字图像处理应用中里程碑式的成功。
最近几十年来,科学技术的不断开展使数字图像处理在各领域都得到了更加广泛的应用和关注。
许多学者在图像处理的技术中投入了大量的研究并且取得了丰硕的成果,使数字图像处理技术到达了新的高度,并且开展迅猛。
二.数字图象处理研究的容一般的数字图像处理的主要目的集中在图像的存储和传输,提高图像的质量,改善图像的视觉效果,图像理解以及模式识别等方面。
新世纪以来,信息技术取得了长足的开展和进步,小波理论、神经元理论、数字形态学以及模糊理论都与数字处理技术相结合,产生了新的图像处理方法和理论。
比方,数学形态学与神经网络相结合用于图像去噪。
这些新的方法和理论都以传统的数字图像处理技术为依托,在其理论根底上开展而来的。
数字图像处理技术主要包括:⑴图像增强图像增强是数字图像处理过程中经常采用的一种方法。
其目的是改善视觉效果或者便于人和机器对图像的理解和分析,根据图像的特点或存在的问题采取的简单改善方法或加强特征的措施就称为图像增强。
⑵图像恢复图像恢复也称为图像复原,其目的是尽可能的减少或者去除数字图像在获取过程中的降质,恢复被退化图像的本来面貌,从而改善图像质量,以提高视觉观察效果。
从这个意义上看,图像恢复和图像增强的目的是一样的,不同的是图像恢复后的图像可看成时图像逆退化过程的结果,而图像增强不用考虑处理后的图像是否失真,适应人眼视觉和心理即可。
⑶图像变换图像变换就是把图像从空域转换到频域,就是对原图像函数寻找一个适宜变换的数学问题,每个图像变换方法都存在自己的正交变换集,正是由于各种正交换集的不同而形成不同的变换。
计算机图像处理实验报告学院:信息学院班级:姓名:学号:实验内容:数字图像处理1、应用MATLAB语言编写显示一幅灰度图像、二值图像、索引图像及彩色图像的程序,并进行相互之间的转换;(1)、显示一副真彩RGB图像代码:I=imread('mikasa.jpg');>>imshow(I);效果:(2)、RGB转灰度图像代码:graycat=rgb2gray(I);>> subplot(1,2,1);>> subimage(I);>> subplot(1,2,2);>> subimage(graycat);效果:(3)、RGB转索引图像代码:[indcat,map]=rgb2ind(I,0.7);>> subplot(1,2,1);>> subimage(I);>> subplot(1,2,2);>> subimage(indcat,map);效果:(4)、索引图像转RGB代码:I1=ind2rgb(indcat,map);>>subplot(1,2,1);>>subimage(indcat,map);>>subplot(1,2,2);>>subimage(I1);效果:(5)、索引转灰度图像代码:i2gcat=ind2gray(indcat,map);>>subplot(1,2,1);>>subimage(indcat,map);>>subplot(1,2,2);>>subimage(i2gcat);效果:(6)、灰度转索引图像代码:[g2icat,map]=gray2ind(graycat,64);>>subplot(1,2,1);>>subimage(graycat);>>subimage(g2icat,map);效果:(7)、RGB转二值图像代码:r2bwcat=im2bw(I,0.5);>>subplot(1,2,1);>>subimage(I);>>subplot(1,2,2);>>subimage(r2bwcat);效果:(8)灰度转二值图像代码:g2bwcat=im2bw(graycat,0.5); subplot(1,2,1);>>subimage(graycat);>>subplot(1,2,2);>>subimage(g2bwcat);效果:(9)、索引转二值图像代码:>> i2bwcat=im2bw(indcat,map,0.7);>>subimage(indcat,map);>>subplot(1,2,2);>>subimage(i2bwcat);效果:2、应用MATLAB工具箱演示一幅图像的傅里叶变换、离散余弦变换,观察其频谱图。
从RGB⾊转为灰度⾊算法⼀、基础 对于彩⾊转灰度,有⼀个很著名的⼼理学公式:Gray = R*0.299 + G*0.587 + B*0.114⼆、整数算法 ⽽实际应⽤时,希望避免低速的浮点运算,所以需要整数算法。
注意到系数都是3位精度的没有,我们可以将它们缩放1000倍来实现整数运算算法:Gray = (R*299 + G*587 + B*114 + 500) / 1000 RGB⼀般是8位精度,现在缩放1000倍,所以上⾯的运算是32位整型的运算。
注意后⾯那个除法是整数除法,所以需要加上500来实现四舍五⼊。
就是由于该算法需要32位运算,所以该公式的另⼀个变种很流⾏:Gray = (R*30 + G*59 + B*11 + 50) / 100 但是,虽说上⼀个公式是32位整数运算,但是根据80x86体系的整数乘除指令的特点,是可以⽤16位整数乘除指令来运算的。
⽽且现在32位早普及了(AMD64都出来了),所以推荐使⽤上⼀个公式。
三、整数移位算法 上⾯的整数算法已经很快了,但是有⼀点仍制约速度,就是最后的那个除法。
移位⽐除法快多了,所以可以将系数缩放成 2的整数幂。
习惯上使⽤16位精度,2的16次幂是65536,所以这样计算系数:0.299 * 65536 = 19595.264 ≈ 195950.587 * 65536 + (0.264) = 38469.632 + 0.264 = 38469.896 ≈ 384690.114 * 65536 + (0.896) = 7471.104 + 0.896 = 7472 可能很多⼈看见了,我所使⽤的舍⼊⽅式不是四舍五⼊。
四舍五⼊会有较⼤的误差,应该将以前的计算结果的误差⼀起计算进去,舍⼊⽅式是去尾法: 写成表达式是:Gray = (R*19595 + G*38469 + B*7472) >> 16 2⾄20位精度的系数:Gray = (R*1 + G*2 + B*1) >> 2Gray = (R*2 + G*5 + B*1) >> 3Gray = (R*4 + G*10 + B*2) >> 4Gray = (R*9 + G*19 + B*4) >> 5Gray = (R*19 + G*37 + B*8) >> 6Gray = (R*38 + G*75 + B*15) >> 7Gray = (R*76 + G*150 + B*30) >> 8Gray = (R*153 + G*300 + B*59) >> 9Gray = (R*306 + G*601 + B*117) >> 10Gray = (R*612 + G*1202 + B*234) >> 11Gray = (R*1224 + G*2405 + B*467) >> 12Gray = (R*2449 + G*4809 + B*934) >> 13Gray = (R*4898 + G*9618 + B*1868) >> 14Gray = (R*9797 + G*19235 + B*3736) >> 15Gray = (R*19595 + G*38469 + B*7472) >> 16Gray = (R*39190 + G*76939 + B*14943) >> 17Gray = (R*78381 + G*153878 + B*29885) >> 18Gray = (R*156762 + G*307757 + B*59769) >> 19Gray = (R*313524 + G*615514 + B*119538) >> 20 仔细观察上⾯的表格,这些精度实际上是⼀样的:3与4、7与8、10与11、13与14、19与20 所以16位运算下最好的计算公式是使⽤7位精度,⽐先前那个系数缩放100倍的精度⾼,⽽且速度快:Gray = (R*38 + G*75 + B*15) >> 7 其实最有意思的还是那个2位精度的,完全可以移位优化:Gray = (R + (WORD)G<<1 + B) >> 2========================在计算机中使⽤最多的 RGB 彩⾊空间,分别对应红、绿、蓝三种颜⾊;通过调配三个分量的⽐例来组成各种颜⾊。
实验一:1.1灰度图像到索引图像的转换clearinfo1 = imfinfo('nela.tif');info1RGBa = imread('nela.tif');figure(1);imshow(RGBa);title('原图电信1301班刘阳');figure(2);[RGB1,map1] = gray2ind(RGBa,128);imshow(RGB1,map1);title('灰度图像到索引图像灰度级128 电信1301班刘阳'); figure(3);[RGB2,map2] = gray2ind(RGBa,16);imshow(RGB2,map2);title('灰度图像到索引图像灰度级16 电信1301班刘阳'); imwrite(RGB1,map1,'nela2.tif');imwrite(RGB2,map2,'nela3.tif');info2 = imfinfo('nela3.tif');info2info3 = imfinfo('nela4.tif');info3figure(4);i = ind2gray(RGB1,map1);imshow(i);title('索引图象到灰度图像灰度级128 电信1301班刘阳'); figure(5);j = ind2gray(RGB2,map2);imshow(j);title('索引图象到灰度图像灰度级16 电信1301班刘阳');1.2 RGB图像到索引图像的转换info = imfinfo('pkq.jpg');infoRGB = imread('pkq.jpg');figure(1);imshow(RGB);title('原图电信1301刘阳');figure(2);y = rgb2ind(RGB,256);imwrite(y,'pkq1.bmp');imshow(y);title('RGB图像向索引图像转换电信1301刘阳'); info1 = imfinfo('pkq1.bmp');info1[X,MAP] = imread('pkq1.bmp');RGB1 = ind2rgb(X,MAP);imwrite(RGB1,'pkq2.jpg');figure(3);imshow(RGB1);title('索引图像向RGB图像转换电信1301刘阳'); info2 = imfinfo('pkq2.jpg');info23. RGB图像到二值图像的转换RGBa=imread('lenna_original_RGB.tif'); % 将图像“1.jpg”的数据赋给变量RGB figure(1); % 设定显示窗口1imshow(RGBa); % 显示原“1.jpg”文件title('原图电信1301刘阳');bw1a=im2bw(RGBa,0.4); % 阀值为0.4进行二值转换bw2a=im2bw(RGBa,0.5); % 阀值为0.5进行二值转换bw3a=im2bw(RGBa,0.6); % 阀值为0.6进行二值转换bw4a=im2bw(RGBa,0.7); % 阀值为0.6进行二值转换figure(2); % 设定显示窗口2imshow(bw1a); % 显示索引图像bw1title('RGB图像向二值图像转换阈值0.5 电信1301刘阳');figure(3); % 设定显示窗口2imshow(bw2a); % 显示索引图像bw1title('RGB图像向二值图像转换阈值0.5 电信1301刘阳');figure(4); % 设定显示窗口3imshow(bw3a);title('RGB图像向二值图像转换阈值0.6 电信1301刘阳');figure(5); % 设定显示窗口4imshow(bw4a);title('RGB图像向二值图像转换阈值0.7 电信1301刘阳');3.索引图像到二值图像的转换info = imfinfo('1.jpg');[X,MAP] = imread('1.jpg');figure(1);imshow(X,MAP);title('原图电信1301刘阳');bw1 = im2bw(X,MAP,0.1);bw2 = im2bw(X,MAP,0.3);bw3 = im2bw(X,MAP,0.5);bw4 = im2bw(X,MAP,0.7);bw5 = im2bw(X,MAP,0.9);figure(2);imshow(bw1);title('索引图像向二值图像转换阈值0.1 电信1301刘阳'); figure(3);imshow(bw2);title('索引图像向二值图像转换阈值0.3 电信1301刘阳'); figure(3);imshow(bw3);title('索引图像向二值图像转换阈值0.5 电信1301刘阳'); figure(5);imshow(bw4);title('索引图像向二值图像转换阈值0.1 电信1301刘阳'); figure(6);imshow(bw5);title('索引图像向二值图像转换阈值0.1 电信1301刘阳');实验二:A=magic(4);B=ones(4);A(8,8)=0;B(8,8)=0;C1=ifft2(fft2(A).*fft2(B));C1 = C1(1:7,1:7);C1=real(C1);C1C2=conv2(A,B);C2=C2(1:7,1:7);C2图像的傅里叶变换clear;info = imfinfo('nela.tif');infoRGB = imread('nela.tif');figure(1);imshow(RGB);title('原图电信1301刘阳0121308880430'); B=fft2(RGB);S = abs(B);figure(2);imshow(S,[]);figure(3);Fc = fftshift(B);imshow(abs(Fc),[]);figure(4);S2 = log(1 + abs(Fc));imshow(S2,[]);figure(5);imshow(S2,[]);colormap(jet(64)),colorbar;title('傅里叶变换后的电信1301刘阳0121308880430');3.A = zeros(128,128);Afigure(1);imshow(A);A(60:68,60:68) = 1;Afigure(2);imshow(A);title('原图 电信1301刘阳');FA = fft2(A);figure(3);imshow(FA,[]);FA1 = abs(FA);figure(4);imshow(FA1,[]);FA2 = fftshift(FA1);figure(5);imshow(FA2,[]);FA3 = abs(FA2);figure(6);imshow(FA3,[]);title('fft变换后的频谱图电信1301刘阳'); FA4 = log(FA3);figure(7);imshow(FA4,[]);实验三:I = imread('nela.tif');figure(1);imshow(I);title('原图电信1301刘阳');I1 = imnoise(I,'gaussian',0,0.02);I2 = imnoise(I,'salt & pepper',0.4);figure(2);subplot(2,2,1);imshow(I1);title('加入高斯噪声电信1301刘阳'); h1 = [1 1 1;1 1 1;1 1 1];h1 = h1/9;h2 = ones(5); h2 = h2/25;h3 = ones(7); h3 = h3/49;T1 = conv2(double(I1),double(h1)); subplot(2,2,2);imshow(T1,[]);title('3*3模板均值滤波');T2 = conv2(double(I1),double(h2)); subplot(2,2,3);imshow(T2,[]);title('5*5模板均值滤波');T3 = conv2(double(I1),double(h2)); subplot(2,2,4);imshow(T3,[]);title('7*7模板均值滤波');figure(3);subplot(2,2,1);imshow(I2);title('加入椒盐电信1301刘阳');h1 = [1 1 1;1 1 1;1 1 1];h1 = h1/9;h2 = ones(5); h2 = h2/25;h3 = ones(7); h3 = h3/49;T1 = conv2(double(I2),double(h1)); subplot(2,2,2);imshow(T1,[]);title('3*3模板均值滤波');T2 = conv2(double(I2),double(h2)); subplot(2,2,3);imshow(T2,[]);title('5*5模板均值滤波');T3 = conv2(double(I2),double(h2)); subplot(2,2,4);imshow(T3,[]);title('7*7模板均值滤波');figure(4);subplot(2,2,1);imshow(I1);title('加入高斯噪声电信1301刘阳'); T1 = medfilt2(I1);subplot(2,2,2);imshow(T1,[]);title('3*3中值滤波');T2 = medfilt2(I1,[5,5]);subplot(2,2,3);imshow(T2,[]);title('5*5中值滤波');T3 = medfilt2(I1,[7,7]);subplot(2,2,4);imshow(T3,[]);title('7*7中值滤波');figure(5);subplot(2,2,1);imshow(I2);title('加入椒盐噪声电信1301刘阳'); T1 = medfilt2(I2);subplot(2,2,2);imshow(T1,[]);title('3*3中值滤波');T2 = medfilt2(I2,[5,5]);subplot(2,2,3);imshow(T2,[]);title('5*5中值滤波');T3 = medfilt2(I2,[7,7]);subplot(2,2,4);imshow(T3,[]);title('7*7中值滤波');I=imread('nela.tif'); % 将图像“3(3).jpg”的数据赋给变量I figure(1);imshow(I); title('原图电信1301刘阳');BW1=edge(I,'roberts');figure(2),imshow(BW1);title('用Roberts算子进行边缘提取并显示')BW2=edge(I, 'sobel') ;figure(3),imshow(BW2);title('用sobel算子进行边缘提取并显示');BW3=edge(I, 'prewitt') ; % 用sobel算子进行边缘提取并显示figure(4),imshow(BW4);title('用prewitt 算子');BW5=edge(I, 'log') ; % 用sobel算子进行边缘提取并显示figure(5),imshow(BW5);title('用log');BW6=edge(I, 'canny') ; % 用sobel算子进行边缘提取并显示figure(6),imshow(BW6);title('用canny');。