站点图标 AI技术聚合

matlab 图像处理 窗切片处理&分段线性变换&直方图均衡化&直方图统计

matlab 图像处理 窗切片处理&分段线性变换&直方图均衡化&直方图统计

图像处理

1.窗切片处理

应用:对医学数字图像进行切片,使需要观察的部位更加突出

原图:

第一种切片方法:

第二种切片方法:

clear;close all;
Image = im2double(imread('AG.jpg'));  % 将数字图像精度转换至双精度
[h, w] = size(Image);                 % 获取图像大小 即图像的高h,宽w
imshow(Image);title('ACG图像');       % 展示原始图像
NewImagel=zeros(h,w);                   % 根据图像生成矩阵
NewImage2 = Image;                      
a=170/256;b=200/256;c=90/256;d=250/256;         % 初始化设置参数
for x=1:w                                       % 进入循环
    for y=1:h 
        if Image(y,x)<a
            NewImagel(y,x)=c;                   % 根据条件改变矩阵相应位置的值
        else
            NewImage1(y,x)=d;                   % >=a 则将此像素点值置为d
        end
        if Image(y,x)>c && Image(y,x) < a       % 取参数大于c小于a 范围内的值置零
            NewImage2(y,x)=0;
        end
    end
end
figure; imshow(NewImagel);title('图5-5(a)窗切片图像');
figure; imshow(NewImage2);title('图5-5(b)窗切片图像');

**clc:**清除命令窗口的内容,对工作环境中的全部变量无任何影响
**close:**关闭当前的Figure窗口
**close all:**关闭所有的Figure窗口
**clear:**清除工作空间的所有变量
**clear all:**清除工作空间的所有变量,函数,和MEX文件

2.分段线性变换

不同的灰度变换(分段线性;截断;高低灰度值保持不变)

clc;clear;close all;
Image = im2double(rgb2gray(imread('lotus.bmp')));   % 通过消除图像色调和饱和度信息同时保留亮度实现将RGB图像或彩色图转换为灰度图像,即灰度化处理的功能 
                                                    % 将读取的图像灰度化并增大精度
[h,w] = size(Image);        % 获取图像尺寸  h:height,高度;w:width 宽度
imshow(Image);title('原始lotus图像');    %  展示灰度图像Image
NewImage1 = zeros(h,w);      %  生成 h行 w 列的二维矩阵
NewImage2 = zeros(h,w);       
NewImage3 = Image;           
a = 30/256;b = 100/256;c= 75/256;d= 200/256;            
for x = 1 : w               % 最外层循环 宽度
    for y = 1 : h           % 内层循环   高度
        if Image(y,x)<a     % 在灰度图像中 按列从上至下循环 若(y,x)处值<a时 对图像进行下行处理
            NewImage1(y,x) = Image(y,x)*c/a;        %  分段处理
        elseif Image(y,x)<b  % 若(y,x)处值<b时 对图像进行下行处理
            NewImage1(y,x) = (Image(y,x)-a)*(d-c)/(b-a)+c;
        else                 % 其他情况 做以下处理
            NewImage1(y,x) = (Image(y,x)-b)*(1-d)/(1-b)+d;
        end
        if Image(y,x)>a&& Image(y,x)<b    % 介于(a,b)之间  做下行处理
            NewImage3(y,x) = (Image(y,x)-a)*(d-c)/(b-a)+c;
        end
    end
end
NewImage2 = imadjust(Image,[a;b],[c;d]);    % imadjust(image, [low_in high_in], [low_out high_out], gamma)  
                                            % 低于low_in与高于high_in的值被剪裁,低于low_in映射到low_out;高于high_in
                                            % 映射到high_out  ;
                                            % 另一个参数:gamma指定曲线的形状,该曲线将图像中的强度值映射为函数图像。此行代码未使用此参数
figure;imshow(NewImage1);title('分段线性灰度级变换图像');
figure;imshow(NewImage2);title('截断式灰度级变换图像');
figure;imshow(NewImage3);title('高低灰度级保持不变图像');


3.直方图均衡化

图像直方图与均衡后图像直方图对比

clear;close all;
Image = rgb2gray(imread('couple.bmp'));   % 读取灰度化图像
histgram = imhist(Image);                  % 直接调用函数 imhist(I,N): 统计并显示图像I的直方图,N为灰度级,默认256
[h,w] = size(Image);
NewImage = zeros(h,w);                    % 根据图像尺寸生成
s = zeros(256); s(1) = histgram(1);       % s:256x256双精度矩阵;  初始化s(1)
for t = 2:256                             
    s(t) = s(t-1)+histgram(t);            % 获取灰度值的累积分布 
end
for x = 1:w
    for y = 1:h
        NewImage(y,x) = s(Image(y,x)+1)/(w*h);   %利用直方图计算新的图像灰度级  频率
    end
end
figure;imshow(Image);title('couple灰度图像');
figure;imhist(Image);title('couple灰度图像的直方图');
axis tight;
figure;imshow(NewImage);title('直方图均衡化处理后图像');
figure;imhist(NewImage);title('直方图均衡化处理后图像的直方图');
axis tight;


%matlab 提供了直方图均衡化函数
%J = histeq(I,N)
%对图形I进行均衡化处理,N为输出图像的灰度级数
% clc,clear,close all;
% Image = imread('couple.bmp');
% NewImage = histeq(Image,64);
% subplot(121),imshow(Image);
% subplot(122),imshow(NewImage);

4.图像直方图统计

直方图统计过程:通过循环统计图像每一个像素点值,得到(0,256)范围每一个值的个数,生成直方图

clc;clear;close all;
Image = rgb2gray(imread('couple.bmp'));     % 读取灰度化图像
histgram = zeros(256);                      % 生成矩阵 256x256
[h , w] = size(Image);                      %  获取图像尺寸
for x = 1 : w
    for y = 1 : h
        histgram(Image(y,x)+1) = histgram(Image(y,x)+1)+1;    %  在循环中统计并累加
    end
end
imshow(Image);title('couple灰度图像');
figure;stem(histgram(),'.');   % stem(Y) %绘制直方图高度为Y值
                              %stem(X,Y)%在位置X处绘制直方图
                              % stem(_,‘fill’)%fill表示填充图形中的小圆圈  ‘.’则无填充
axis tight;                    % axis tight 是设置坐标轴显示范围为紧凑型
% 也可以直接调用函数 imhist(I,N): 统计并显示图像I的直方图,N为灰度级,默认256
% imhist(X,MAP):统计并显示索引图像的直方图,MAP为调色板;
% [COUNTS,X] = imhist(...):返回直方图数据向量COUNTS和相应的色彩向量X
% 程序如下:
% Image = reg2gray(imread('couple.bmp'));
% figure;imhist(Image);
% axis tight;

可视生成矩阵更容易理解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ljW80aXw-1648539675391)(E:\笔记\matlab\images\image-20220329153840319.png)]

彩向量X
% 程序如下:
% Image = reg2gray(imread(‘couple.bmp’));
% figure;imhist(Image);
% axis tight;


可查看生成矩阵更容易理解

![在这里插入图片描述](https://img-blog.csdnimg.cn/a53841fbc6c24c8bad128fff8930a196.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54u85pePIFggIOWwj-WTpQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c336027b817f4cae89488ef9a2352358.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54u85pePIFggIOWwj-WTpQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

文章出处登录后可见!

已经登录?立即刷新
退出移动版