图像highlight显示matlab程序

图像highlight显示matlab程序

框选部分区域显示

请添加图片描述
首先上效果图。

主函数Rect.m

%%
% 该文件主要是用于在源图像中选择两块区域进行放大显示
%%
clear all;
clc;
source_dir = 'E:\Desktop\Highlight\source'; % 存放待放大图像的文件夹
names = {'PIAF.png', 'MFEIF.png', 'IVIF.png', 'Densfuse.png', 'CNN.png',  'IVIF.png', 'vi.png', 'ir.png'};  %% 文件夹下所有图像的名称
results_dir = '.\MSRS'; % 存放highlight结果的文件夹
if ~exist(results_dir,'dir')
	mkdir(results_dir)
end
[m, n] = size(names);
for i  = 1 : n
    img_name = fullfile(source_dir, cell2mat(names(i))); % 构造图像的路经
    save_name = fullfile(results_dir, cell2mat(names(i))); %构造保存图像的路径
    I3 = im2double(imread(img_name)); % 读取图像
    imshow(I3)
    if size(I3, 3)<3 %%如果是灰度图像则转换为3通道图像
        I3 = cat(3, I3, I3, I3);
    end
    %% 第一个Highlighted的区域选择
    if i == 1
        [img0, rect1] = imcrop(I3);
        pt1 = floor([rect1(1), rect1(2)]);
        pt2 = floor([rect1(3), rect1(4)]);
    end
    color1 = [255.0 0 0];
    imMod = drawRect(I3, pt1, pt2, 3, color1); % 42
    imshow(imMod)
    %% 第二个Highlighted的区域选择
    if i ==1
        [img0, rect2] = imcrop(imMod);
        pt2_1 = floor([rect2(1), rect2(2)]);
        pt2_2 = floor([rect2(3), rect2(4)]);
    end
    color2 = [0 255.0 0];
    imMod2 = drawRect(imMod, pt2_1, pt2_2, 3, color2); % 42
    imshow(imMod2)
    disp(save_name)
    imwrite(imMod2,save_name);
end

所调用的:drawRect.m函数:

function [ dest ] = drawRect( src, pt, wSize,  lineSize, color )
%简介:
% %将图像画上有颜色的框图,如果输入是灰度图,先转换为彩色图像,再画框图
% 图像矩阵
% 行向量方向  是  y
% 列向量方向  是  x
%----------------------------------------------------------------------
%输入:
% src:        原始图像,可以为灰度图,可为彩色图
% pt:         左上角坐标   [x1, y1]
% wSize:   框的大小      [wx, wy]
% lineSize: 线的宽度
% color:     线的颜色      [r,  g,  b] 
%----------------------------------------------------------------------
%输出:
% dest:           画好了的图像
%----------------------------------------------------------------------
 
%flag=1: 有缺口的框
%flag=2: 无缺口的框
flag = 2;

%判断输入参数个数
if nargin < 5
    color = [255 255 0];
end
 
if nargin < 4
    lineSize = 1;
end
 
if nargin < 3
    disp('输入参数不够 !!!');
    return;
end
 
%判断框的边界问题
[yA, xA, z] = size(src);
x1 = pt(1);
y1 = pt(2);
wx = wSize(1);
wy = wSize(2);
if  x1>xA || ...
        y1>yA||...
        (x1+wx)>xA||...
        (y1+wy)>yA
 
    disp('画的框将超过图像 !!!');
    return;
end
 
%如果是单通道的灰度图,转成3通道的图像
if 1==z
    dest(:, : ,1) = src;
    dest(:, : ,2) = src;
    dest(:, : ,3) = src;
else
    dest = src;
end
 
%开始画框图
for c = 1 : 3                 %3个通道,r,g,b分别画
    for dl = 1 : lineSize   %线的宽度,线条是向外面扩展的
        d = dl - 1;
        if  1==flag %有缺口的框
            dest(  y1-d ,            x1:(x1+wx) ,  c  ) =  color(c); %上方线条
            dest(  y1+wy+d ,     x1:(x1+wx) , c  ) =  color(c); %下方线条
            dest(  y1:(y1+wy) ,   x1-d ,           c  ) =  color(c); %左方线条
            dest(  y1:(y1+wy) ,   x1+wx+d ,    c  ) =  color(c); %左方线条
        elseif 2==flag %无缺口的框
            dest(  y1-d ,            (x1-d):(x1+wx+d) ,  c  ) =  color(c); %上方线条
            dest(  y1+wy+d ,    (x1-d):(x1+wx+d) ,  c  ) =  color(c); %下方线条
            dest(  (y1-d):(y1+wy+d) ,   x1-d ,           c  ) =  color(c); %左方线条
            dest(  (y1-d):(y1+wy+d) ,   x1+wx+d ,    c  ) =  color(c); %左方线条
        end
    end    
end %主循环尾
end %函数尾

Demo文件可从:https://download.csdn.net/download/fovever_/87485027 下载(注:该资源中仅包含画矩形框的程序

部分区域放大显示

首先依旧上效果图
在这里插入图片描述

使用的数函数zoom_in.m如下:

%%
% 该文件主要是用于在源图像中选择两块区域进行放大显示
%%
clear all;
clc;
source_dir = 'E:\Desktop\Highlight\source'; % 存放待放大图像的文件夹
names = {'PIAF.png', 'MFEIF.png', 'IVIF.png', 'Densfuse.png', 'CNN.png',  'IVIF.png', 'vi.png', 'ir.png'};  %% 文件夹下所有图像的名称
results_dir = '.\MSRS'; % 存放highlight结果的文件夹
if ~exist(results_dir,'dir')
	mkdir(results_dir)
end
[m, n] = size(names);
for i  = 1 : n
    img_name = fullfile(source_dir, cell2mat(names(i))); % 构造图像的路经
    save_name = fullfile(results_dir, cell2mat(names(i))); %构造保存图像的路径
    I3 = im2double(imread(img_name)); % 读取图像
    imshow(I3)
    if size(I3, 3)<3 %% 如果是灰度图像则转换为3通道图像
        I3 = cat(3, I3, I3, I3);
    end
    %% 第一个待放大的区域选择
    if i == 1 %% 如果是第一幅图片,则应该在这个图像上画框,然后获取框的坐标信息
        [img0, rect1] = imcrop(I3);
        pt1 = floor([rect1(2), rect1(1)]);
        pt2 = floor([rect1(4) + rect1(2), rect1(3) + rect1(1)]);
    end
    color1 = [255.0 0 0];
    imMod = localExpandRGB(I3, pt1, pt2, 2, 3, 3, color1); % 42
    %% 下面是关于localExpandRGB函数的参数介绍
    %% function imMod = localExpandRGB(inputim,topLeft,lowerRight,expandTime,w,framedim,color)
    %%%局部放大画中画小程序
    %inputim 为输入图像
    %topLeft 为原区域的左上点坐标,格式如[123,456]
    %lowerRight 为原区域的右下点坐标,格式同上
    %%坐标可通过在Matlab的figure中进行查看,注意需要调换横纵坐标顺序
    %%如,假设图像尺寸M*N,则左下角点坐标为(M,1),而Matlab的figure显示为(1,M)
    %expandTime 为放大倍数
    %w 为红色框线的宽度,建议设为3,可根据实际情况自行调整
    %framedim 为画中画位置的选择参数
    %         1---左上方
    %         2---右上方
    %         3---左下方
    %         4---右下方
    %%imMod为输出图像
    imshow(imMod)
    
    %% 第一个待放大的区域选择
    if i ==1
        [img0, rect2] = imcrop(imMod);
        pt2_1 = floor([rect2(2), rect2(1)]);
        pt2_2 = floor([rect2(4) + rect2(2), rect2(3) + rect2(1)]);
    end
    color2 = [0 255.0 0];
    imMod2 = localExpandRGB(imMod, pt2_1, pt2_2, 2, 3, 4, color2); % 42
    imshow(imMod2)    
    disp(save_name)
    imwrite(imMod2 ,save_name); %保存结果
end

该程序中使用的localExpandRGB.m函数如有需要请联系博主([email protected], 可加QQ备注姓名+学校),付费获取。

猜你喜欢

转载自blog.csdn.net/fovever_/article/details/129178895