活动介绍

调用函数h=imhist(X,n)统计灰度图像直方图; 2.通过程序获取灰度图像的直方图; 3. 对灰度图像进行简单的灰度线形变换 ; 4.自己编写一个与灰度图像直方图相关的程序

时间: 2024-12-28 15:33:24 浏览: 67
在MATLAB中,`imhist(X,n)` 函数用于计算灰度图像 `X` 的直方图,其中 `n` 参数通常是一个整数,表示直方图的bins数目。该函数将返回一个向量,代表每个bin(灰度值范围)中的像素数量。 要通过程序获取灰度图像的直方图,你可以按照以下步骤操作: ```matlab % 假设你已经有了一个名为 'img' 的灰度图像变量 histogramData = imhist(img, n); % 其中 n 是所需的bins数量 % 可以查看直方图数据 disp(histogramData); % 如果想以图形形式展示直方图,可以这样做: figure; bar(histData); xlabel('灰度值'); ylabel('像素计数'); title('灰度图像直方图'); ``` 对于简单的灰度线性变换,例如将图像从0-255缩放到新的范围,比如0-1,可以使用 `imadjust` 函数: ```matlab newImg = imadjust(img, [0 1], [], []); % 第二个和第三个参数是输入和输出范围,默认为全0到全1 ``` 如果你想自己编写一个完整的灰度图像直方图处理程序,可以创建一个函数,包括读取图像、计算直方图、显示直方图以及线性变换等功能。例如: ```matlab function processImageAndHist(imageFile, bins) % 读取图像 img = imread(imageFile); % 计算直方图 histogramData = imhist(img, bins); % 显示直方图 figure; bar(histData); xlabel('灰度值'); ylabel('像素计数'); title(['灰度图像 ''' imageFile ''' 直方图']); % 线性变换 newImg = imadjust(img, [0 1], []); % 显示处理后的图像 imshow(newImg); end ``` 然后你可以像这样调用这个函数: ```matlab processImageAndHist('your_image.jpg', 256); % 替换 'your_image.jpg' 为你实际的图片文件名 ```
阅读全文

相关推荐

%读出图像 I=imread('rice.tif'); %显示图像 figure(1),imshow(I); %显示直方图 figure(2),imhist(I,64); %原图像f(m,n)的灰度范围[a,b]线形变换为图像g(m,n),灰度范围[a’,b’] %公式:g(m,n)=a’+(b’-a’)* f(m,n)/(b-a) %increase contrast J=imadjust(I,[0.15 0.9],[0 1]); figure(3),imshow(J); %显示直方图 figure(4),imhist(J); %decrease contrast J=imadjust(I,[0 1],[0.3 0.8]); figure(5),imshow(J); %显示直方图 figure(6),imhist(J); %直方图均衡 J=histeq(I); figure(7),imshow(J); figure(8),imhist(J); %加入salt & pepper噪声 J=imnoise(I,'salt & pepper',0.02); %加入gauss噪声 %J=imnoise(I,'gauss',0.02); %加入speckle噪声 %J = IMNOISE(I,'speckle',0.02); figure(9),imshow(J); %3*3中值滤波 MFJ=medfilt2(J,[3 3]); figure(10),imshow(MFJ); %平均过滤 %AFJ=filter2(fspecial('average',5),J); %自适应滤波 I = imread('saturn.tif'); J = imnoise(I,'gaussian',0,0.005); K = wiener2(J,[5 5]); imshow(J) figure, imshow(K) %高斯过滤 AFJ=filter2(fspecial('gaussian',5,0.05),J); % sobel 锐化 %AFJ=filter2(fspecial('sobel')',J); figure(11),imshow(AFJ/255); %利用低通邻域平均模板进行平滑: I=imread('girl.bmp'); subplot(1,3,1); imshow(I); title('原图'); J=fspecial('average'); J1=filter2(J,I)/255; subplot(1,3,2); imshow(J1); title('3*3滤波'); K=fspecial('average',9); K1=filter2(K,I)/255; subplot(1,3,3); imshow(K1); title('9*9滤波'); %中值滤波和平均滤波 I=imread('girl.bmp'); J=imnoise(I,'gaussian',0,0.01); subplot(2,2,1); imshow(I); title('原图'); subplot(2,2,2); imshow(J); title('noise'); K=fspecial('average',5); K1=filter2(K,J)/255; subplot(2,2,3); imshow(K1); title('average'); L=medfilt2(J,[3 5]); subplot(2,2,4); imshow(L); title('medium'); %高通滤波边缘增强 I=imread('girl.bmp'); subplot(2,2,1); imshow(I); title('original pic'); J=fspecial('average',3); J1=conv2(I,J)/255; %J1=filter2(J,I)/255; subplot(2,2,2); imshow(J1); title('3*3lowpass'); K=fspecial('prewitt'); K1=filter2(K,J1)*5; subplot(2,2,3); imshow(K1); title('prewitt'); L=fspecial('sobel'); L1=filter2(L,J1)*5; subplot(2,2,4); imshow(L1); title('sobel'); %边缘检测 %sobel和laplacian算子 I=imread('girl.bmp'); subplot(1,3,1); imshow(I); title('original pic'); K=fspecial('laplacian',0.7); K1=filter2(K,I)/100; subplot(1,3,2); imshow(K1); title('laplacian'); L=fspecial('sobel'); L1=filter2(L,I)/200; subplot(1,3,3); imshow(L1); title('sobel'); 修改上述程序来实现以下功能:(1)改变图像的对比度,采用灰度变换,直方图均衡化; (2)观察局部平均、中值滤波、自适应滤波的效果; (3)用所学锐化算子对图像进行锐化处理。 (4)编制一个通用的边缘提取函数。通过输入不同的参数,能够实现Sobel算子、Prewitt算子、Roberts算子、LOG算子和Canny边缘检测。