标签:彩色图像 coorList im1 num im2 y1 x1 大家来找 MATLAB
(MATLAB)大家来找茬-简易的彩色图像找不同
by 今天不飞了
闲着没事,又来写代码了。今天相中这个,彩色图像找不同。写了个简易的版本,不适用于手机拍的图
核心代码
function [coorList,num] = SpotTheDifferences(im1,im2)
% 平滑
H = fspecial('gaussian',7,3);
smooth1 = imfilter(im1,H,'same');
smooth2 = imfilter(im2,H,'same');
% 差
ecolor = uint8(abs(double(smooth1)-double(smooth2)));
egray = rgb2gray(ecolor);
% 二值
bw = imbinarize(egray);
% 去小噪
se = strel('disk',5);
obj1 = imopen(bw,se);
% 合大体
se = strel('disk',11);
obj2 = imclose(obj1,se);
% 目标
[label,num] = bwlabel(obj2);
coorList = zeros(num,4);
for n = 1:num
[y,x] = find(label==n);
y1 = min(y); y2 = max(y);
x1 = min(x); x2 = max(x);
coorList(n,:) = [x1,x2,y1,y2];
end
end
测试
你自己找两张图像吧
clear; close all; clc
%% {读取图像}
im1 = imread('1.png');
im2 = imread('2.png');
[R,C,D] = size(im1);
im2 = cat(3,imresize(im2(:,:,1),[R,C]),...
imresize(im2(:,:,2),[R,C]),...
imresize(im2(:,:,3),[R,C]));
%% {找不同}
[coorList,num] = SpotTheDifferences(im1,im2);
%% {绘制}
subplot(121),imshow(im1)
hold on
for n = 1:num
drawbox(coorList(n,:))
end
subplot(122),imshow(im2)
hold on
for n = 1:num
drawbox(coorList(n,:))
end
% ----function----
function drawbox(coor)
x1 = coor(1); x2 = coor(2);
y1 = coor(3); y2 = coor(4);
x = [x1,x1,x2,x2,x1];
y = [y1,y2,y2,y1,y1];
plot(x,y,'r-','LineWidth',2)
end
其他
欢迎提供有意思的题目
哔哩哔哩讲解视频:
标签:彩色图像,coorList,im1,num,im2,y1,x1,大家来找,MATLAB 来源: https://blog.csdn.net/xsz591541060/article/details/120979990
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。