08 图像处理

8.1 图片的读写与显示

  1. 读取文件

     **pic = imread("Imagw\\pic.jpg");**
    

    返回值为三维数组(彩色图片);黑白图片(数值矩阵),矩阵的大小对应的是图片的像素大小

  2. 显示图片文件

     **temp = pic(60:100; 60:100); imshow(temp);**
    
  3. 构造图像

     **m = randi([0, 255], [400, 400]); % 转换类型为uint8 m = uint8(m);**
    

    构造渐变的图像:

     **bw = zeros(256, 400); 
    for i = 1:256 
    	for j = 1:400 
    		bw(i, j) = i; 
    end 
    end  
    bw = uint8(bw);**
    
  4. 保存图像

     **imwrite(bw, "Image\\bw.jpg");**
    

8.2 彩色图、灰度图和二值化

  1. RGB分离与合并

     **% 自带的图像; 
    prepper = imread("pepper.png"); 
    R = pepper(:, : ,1); 
    G = pepper(:, : ,2); 
    B = pepper(:, : ,3);  
    % 显示图片 
    subplot(2, 2, 1); 
    imshow(pepper); 
    title("original");  
    
    subplot(2, 2, 2); 
    imshow(R); 
    title("R");  
    
    subplot(2, 2, 3); 
    imshow(G); 
    title("G");  
    
    subplot(2, 2, 4); 
    imshow(B); 
    title("B");**
    
  2. RGB合并

     **rgb(:, : ,1) = R; rgb(:, : ,2) = G; rgb(:, : ,3) = B; imshow(rgb);** 
    
  3. 彩色图转灰度图 rgb2gray

     **pepper_gray = rgb2gray(pepper);**
    
  4. 二值化 imbinarize手动实现:设定阈值,高于阈值为1,低于阈值的置为0

     **pepper_gray = rgb2gray(pepper);
     [row, col] = size(pepper_gray); 
    for i = 1:row 
    for j = 1:col 
    if pepper_gray(i, j) > 128 
    pepper_gray(i, j) = 1; 
    else pepper_gray(i, j) = 0; 
    end 
    end 
    end  
    % open a new figure window figure; 
    pepper_bw = logical(pepper_gray);**
    

    说明:转换之后的图片只有0或者1;直接输出显示是一个近似全黑的图片;可以先把他转化为逻辑值在输出,即可看到效果图自动实现:

    **pepper_gray = rgb2gray(pepper); 
    bw = imbinarize(pepper_gray, "adaptive","Foregroundpplarity","bright","Sensitivity",0.4); 
    imshow(bw);**
    

    参数:method-用于二值化图像的方法:'global'(默认)|‘adaptive'‘Sensitivity'-自适应阅值的敏感度因子:0.05(默认)|[0,1]范围内的数值'ForegroundPolarity'-确定哪些像素被视为前景像素:‘bright'(默认)|‘dark''bright':前景比背景亮dark':前景比背景暗

8.3 图形处理函数

  1. 调整图像大小 imresize

    **I = imread("pepper.png"); j = imresize(I, 0.5); k = imresize(I, [200,200]);**
    

    说明:第二个参数是放大的倍数;也可以指定大小

  2. 旋转图像 imrotate

     **J = imrotate(I, 45);**
    

    说明:逆时针旋转,第二个参数为旋转的角度

  3. 图像的加减乘除

     **J = imadd(I, 50)**
    

    给图片的每个元素加了50,效果为图片变亮了

     **J = imread('rice.png'); J = imread("camerman.png"); 
     K = imadd(I ,K);**
    

    可以将两幅图片进行相加,但是两幅图片的尺寸必须相同;效果为整体变亮,正片叠底两个图片也可以相减,整体推图片会变暗:

    **L = imsubtract(I, J);**
    

    图片可以和数字相乘,也可以和图片相乘:可以整体偏暗或偏亮

    **L = immultiply(I ,2);**
    
  4. 直方图和直方图均衡化

    **I = imread('trie.tif');imhist(I);% 均衡化J = histeq(I);**
    
  5. 连通分量四连通分量和八连通分量:

    **BW = logical([......])L = bwlable(BW, 4);**
    

    bwlable第二个参数为4:四连通分量;8:八连通分量通过连通分量可以实现图片计数:

    **max(max(L))**
    

    max(L)返回了最大值的索引;max(max(L))根据最大值索引找到了最大值索引对应的值;这里返回了区块的数量;

    **I = imread("coins.png");
    bw = imbinarize(I);
    L = bwlable(bw, 8);
    max(max(L));**