(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
兩個測驗


其他
歡迎提供有意思的題目
嗶哩嗶哩講解視頻:【MATLAB】大家來找茬——彩色影像找不同簡易代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/339296.html
標籤:其他
